这是我的代码:
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。
就 glib 而言,您实际上并未向数组添加任何元素。您只是为它们预先分配了空间,然后开始直接访问它们的内存(g_array_index
不会检查您是否在边界内)。
g_array_sort
仍然看到数组的大小为 0。(它为 256 个元素分配了空间,但没有添加任何元素)。
尝试在循环之前执行 g_array_set_size(input_size)
。
我是一名优秀的程序员,十分优秀!