首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

qsort使用中的指针有关问题

2012-08-09 
qsort使用中的指针问题C/C++ code#include iostream#include fstream#include string.h#include st

qsort使用中的指针问题

C/C++ code
#include <iostream>#include <fstream>#include <string.h>#include <stdlib.h>using namespace std;struct Doubleint{    int start,end;};int cmp(const void* a,const void* b){    Doubleint *c = (Doubleint*)a;    Doubleint *d = (Doubleint*)b;    if (d->start < 1000)    {        return -1;    }    else        return 0;}int main() {    ofstream fout ("milk2.out");    ifstream fin ("milk2.in");    int n,i = 0,l,h,max,min,c;    Doubleint ary[3],tmp;    fin >> n;    while(n--){        fin >> ary[i].start;        fin >> ary[i].end;        i++;    }    l = ary[0].start;    h = ary[0].end;    qsort(&ary[0],n,sizeof(Doubleint),cmp);    return 0;}


cmp函数中 b指针总是错误,我查看了一下他的地址没有错误这个事怎么回事?
milk2.in内容为:
3
300 1000
700 1200
1500 2100

[解决办法]
你的数组ary只有3个元素那么大,因此n只要大于3的话,访问就会越界。
[解决办法]
你的qsort没有用~没有快排的效果,请贴上你的完整代码,和要实现的功能~
[解决办法]
Doubleint *c = (Doubleint*)a;
Doubleint *d = (Doubleint*)b;

你需要改为:
Doubleint *c = (Doubleint*)*a;
Doubleint *d = (Doubleint*)*b;

你试试。

[解决办法]
你的CMP函数写成那样到底想要按什么方式排序呢???
[解决办法]
探讨

Doubleint *c = (Doubleint*)a;
Doubleint *d = (Doubleint*)b;

你需要改为:
Doubleint *c = (Doubleint*)*a;
Doubleint *d = (Doubleint*)*b;

你试试。

[解决办法]
if (d->start < 1000)
{
return -1;
}
else
return 0;

就一个d和1000比?c呢?
[解决办法]
探讨

你的CMP函数写成那样到底想要按什么方式排序呢???

[解决办法]
我在xcode下测试没有任何错误啊,楼主不知道出现什么情况了
[解决办法]
探讨

if (d->start < 1000)
{
return -1;
}
else
return 0;

就一个d和1000比?c呢?

热点排行