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 に答える