读书人

qsort使用中的指针有关问题

发布时间: 2012-08-09 15:59:21 作者: rapoo

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呢?

读书人网 >C++

热点推荐