由于空指针,qsort无法正常工作

时间:2013-07-10 02:31:00

标签: c

代码:

struct company_struct
{
    company_name_t company_name;
    double stock_price;
    company_stock_t company_stock;
};

typedef struct company_struct company_struct_t;


int sort_by_price(const void * ptr1, const void * ptr2)
{
    assert(ptr1 != NULL);
    assert(ptr2 != NULL);

    const company_struct_t * ptr1_price = (const company_struct_t *) ptr1;
    const company_struct_t * ptr2_price = (const company_struct_t *) ptr2;

    assert(ptr1_price->stock_price != NULL); //??? Why it failed?
    assert(ptr2_price->stock_price != NULL);

    if(ptr1_price->stock_price > ptr2_price->stock_price) return -1;
    else if (ptr1_price->stock_price == ptr2_price->stock_price) return 0;
    else if (ptr1_price->stock_price < ptr2_price->stock_price) return 1;

}


qsort(company_list, *size, sizeof(company_list), sort_by_price);

当我运行程序时,断言失败。我对C比较陌生,请耐心等待。

2 个答案:

答案 0 :(得分:3)

您需要将单个元素的大小作为qsort的第三个参数传递,如下所示:

qsort(company_list, *size, sizeof(company_struct_t), sort_by_price);

另外,请确保size指向包含要排序的项目数的int

答案 1 :(得分:0)

如果确实这条线路失败了,

assert(ptr1_price->stock_price != NULL); //??? Why it failed?

你应该加快你的编译器警告。您应该收到警告,将double与指针进行比较。 [对于价格,通常使用整数更好。 $ 0.000003是什么意思?]