0

这是我的代码:

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 永远不会被调用。

4

1 回答 1

2

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

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

尝试在g_array_set_size(input_size)循环之前做一个。

于 2013-05-23T23:49:12.557 回答