Я начинающий программист на C и имею проблемы с реализацией (упорядоченного) динамического массива структур.
Перед добавлением элемента в массив я хочу проверить, заполнен ли он, и удвоить его размер в этом случае:
void insert_translation(dict_entry **dict, char *word, char *translation){
if( dictionary_entries == dictionary_size ){
dict_entry *temp_dict;
temp_dict = realloc(&dict, (dictionary_size *= 2) * sizeof(dict_entry) );
// printf("Increased dict size to %d\n", dictionary_size);
// if(temp_dict == NULL){
// fprintf(stderr, "Out of memory during realloc()!\n");
// /*free(dict);
// exit(EXIT_OUT_OF_MEMORY);*/
// }
//free(dict);
//*dict = temp_dict;
}
dictionary_entries++;
printf("Inserted %s into dict - %d of %d filled.\n", word, dictionary_entries, dictionary_size);
}
Я вызываю функцию из основной функции следующим образом:
dictionary_size = 2; //number of initial key-value pairs (translations)
dictionary_entries = 0;
dict_entry *dictionary = malloc(dictionary_size * sizeof(dict_entry));
[...]
insert_translation(&dictionary, "bla", "blub");
В моем понимании словарь - это указатель на пробел в памяти. & словарь - это указатель на указатель, который я передаю функции. В функции dict указывается указатель на указатель, поэтому & dict должен быть указателем на область в памяти? Однако, когда я пытаюсь скомпилировать, я получаю следующее сообщение об ошибке:
pointer being realloc'd was not allocated
Редактировать
Я расширил пример кода, чтобы показать больше кода в основной функции.