g_array_sort()被调用但没有排序

时间:2013-05-23 23:35:55

标签: c glib

这是我的代码:

gint compare_ulong_function (gconstpointer a, gconstpointer b)
{
        return *(unsigned long *)a - *(unsigned long *)b;
}

GArray* build_priority_queue(unsigned char* const input_data, unsigned int const input_size)
{
    GArray* priority_queue = g_array_sized_new(FALSE, TRUE, sizeof(unsigned long), 256);

    int i;
    for (i = 0; i < input_size; i++)
            g_array_index(priority_queue, unsigned long, input_data[i])++;
    g_array_sort(priority_queue, compare_ulong_function);

    return priority_queue;

}

当我调试g_array_sort被调用时(不能进入函数缺少开发包而无法安装它)但是数组没有排序。 从不调用compare_ulong_function。

1 个答案:

答案 0 :(得分:2)

就glib而言,您实际上没有向数组添加任何元素。您只需为它们预先分配空间,然后直接开始访问它们的内存(g_array_index不检查您是否在范围内)。

g_array_sort仍然将数组的大小视为0.(它为256个元素分配了空间,但没有添加任何元素。)

在循环之前尝试执行g_array_set_size(input_size)