2015-03-25 46 views
0

快速排序我有这样的结构:问题在C

typedef struct item{ 
    char label[10]; 
    int support; 
}; 

我创造了这样的结构是这样的数组:

struct item* finstr = (struct item*)malloc(sizeof(struct item)*10); 

我充满了适当的值数组,并要排序该数组根据'support'的值使用qsort函数。但是,数组根本没有被分类。输出结果与输入相同。

这里是调用qsort函数并为“比较”函数的代码:

qsort((void*)finstr,(sizeof(finstr)/sizeof(finstr[0])),sizeof(finstr[0]),comparator); 

比较功能:

int comparator(const void* i1,const void* i2) { 
    int l = ((struct item*)i1)->support; 
    int r = ((struct item*)i2)->support; 
    return l-r; 
} 

在那里我做了错误,我不明白。任何帮助是极大的赞赏。

在此先感谢。

+0

'sizeof(finstr)'是指针'finstr'的​​大小,而不是指针所引用的内存量。 – 2015-03-25 06:34:45

+0

此外,第一个typedef不应该编译imo(它缺少名称) – a3f 2015-03-25 06:36:34

+0

http://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – 2015-03-25 06:38:33

回答

1

表达式(sizeof(finstr)/sizeof(finstr[0]))不会给出元素的数量,除非finstr是一个数组。在你的情况下,它的计算结果为sizeof(void*)/sizeof(struct item),这很可能是0

将其替换为10

从@ForhadAhmed

优秀建议:

其良好做法,以取代malloc(sizeof(struct item)*10)10并传递给qsort功能与宏或变量,这样你就不会意外调用数组的大小qsort用不同于你想要的大小的阵列。

+1

在malloc(sizeof(struct item)* 10)中取代'10'的好习惯,以及用宏或变量传递给qsort函数的数组大小这样你就不会无意中调用一个与你想要的不同大小的数组 – 2015-03-25 06:38:27

0

尝试建立并运行以下命令,看看有什么答案你:

#include <stdio.h> 
#include <stdlib.h> 

typedef struct { 
    char bar[123]; 
    int baz; 
} foo; 

int main(int argc, char** argv) { 
    foo *foo_ptr = malloc(sizeof(foo) * 1000); 
    fprintf(stdout, "%zu\n", sizeof(foo_ptr)); 
    fprintf(stdout, "%zu\n", sizeof(foo_ptr[0])); 
    free(foo_ptr); 
    return 0; 
} 

根据架构,您可能会注意到sizeof(foo_ptr)是八个字节 - 的foo指针称为foo_ptr的大小。将其与sizeof(foo_ptr[0])的值进行比较。这应该提供什么是错误的暗示。