Я написал следующую игрушечную программу для проверки "g_hash_table_lookup ()" внутри рекурсии:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <glib.h>
#include <string.h>
void f_recursive(GHashTable *htable, int level){
char key[] = "test_key";
char value[] = "test_value";
char *returned_value;
if(level > 0){
f_recursive(htable, level - 1);
}
else if(level==0){
g_hash_table_insert(htable,&key[0],&value[0]);
}
returned_value = g_hash_table_lookup(htable,&key[0]);
printf("Level=%d, Returned Value=%s\n",level, returned_value);
}
int main(int argc, char * argv[]){
int i=3;
GHashTable *Hash_Table;
Hash_Table = g_hash_table_new(g_str_hash,g_str_equal);
f_recursive(Hash_Table, i);
}
Цель этого кода - просто вызвать рекурсивную функцию, которая на каждом уровне рекурсии просматривает в хэш-таблице значение ключа, которое было вставлено только на самом низком уровне рекурсии. Я ожидаю, что на каждом уровне рекурсии я смогу восстановить значение, вставленное на самом низком уровне, и поэтому ожидаемый результат этой программы должен быть:
Level=0, Returned Value=test_value
Level=1, Returned Value=test_value
Level=2, Returned Value=test_value
Level=3, Returned Value=test_value
Однако это не то, что происходит. Вместо этого я получаю следующее:
Level=0, Returned Value=test_value
Level=1, Returned Value=([��`�
Level=2, Returned Value=(null)
Level=3, Returned Value=(null)
Буду признателен, если кто-нибудь сможет объяснить мне, почему я могу получить вставленное значение в хеш-таблице только на уровне рекурсии, где я выполняю вставку.
Спасибо!
Daniel