В этом примере, который вы показали, и в бесконечной битве за segfault вы не запустили malloc или new'd память для переменной q
... по какой-то причине вы пропустили показ кода для add_inv
в вашей main
функции .... ключ находится в указателе на символ, то есть q
, у которого есть malloc
d память ...
Вы пробовали это так:
int main(int argc, char *argv[]){
const char *qInit = "foo";
char *q;
hashtable = g_hash_table_new(g_str_hash, g_str_equal);
...
q = strdup(qInit); /* Now q has memory allocated! */
add_inv(q); /* This should work */
g_hash_table_destroy(hashtable);
}
Ошибка сегмента возникает, когда вы пытаетесь отменить ссылку на память, которая не имеет malloc
d или new
d в зависимости от C / C ++ соответственно .... это может произойти, если вы free
d или delete
указатель da, который не является free
d или new
d ....