прежде всего большое спасибо за попытку помочь мне или хотя бы взглянуть на мою проблему и, возможно, сказать мне, что я делаю не так.
Хорошо, так что я недавно столкнулсяпроблема в том, что realloc()
выдает ошибку ошибки сегментации, когда используется для расширения массива в typedef struct
, или, по крайней мере, так в моем случае.
Я пытался найти решение в Интернете, на этой веб-странице и на других страницах, но, к сожалению, мне не удалось его найти.Вот почему я действительно надеюсь, что один из вас будет так любезен, чтобы помочь мне.
Большое спасибо заранее, Матиас
Кстати.здесь я добавил код, который дает мне ошибки.
typedef struct dict_int {
int* size;
char** keys;
int* values;
} dict_int;
Это моя структура.А ниже находится функция (add_int()
), которая создает проблемы ...; (
void add_int(dict_int* dictionary, int len, ...) {
va_list valist;
va_start(valist, len);
int di_size = dictionary->size[0];
for(int i = di_size-1; i < di_size-1+len; i++) {
dictionary->keys[i] = va_arg(valist, char*);
dictionary->values[i] = va_arg(valist, int);
printf("Change [Size]: %d -> ", dictionary->size[0]);
dictionary->size[0]++;
printf("%d\n", dictionary->size[0]);
if((dictionary->keys = (char**) realloc(dictionary->keys, dictionary->size[0] * 4 + 4))
!= NULL) {
printf("Worked out!");
} else
printf("Didn't work!");
if((dictionary->values = (int*) realloc(dictionary->values, dictionary->size[0] * 4 + 4))
!= NULL) {
printf("Worked out!");
} else
printf("Didn't work!");
}
va_end(valist);
}
А вот как я использовал ее в функции main()
:
int main(int argc, char* argv[]) {
printf("\n - !Program has started! - \n");
dict_int dictionary = Dict_int(2, "first", 0, "second", 1);
printf("\nDictionary-Size: %d\n", dictionary.size[0]);
printf("Dictionary: %s: %d\n", dictionary.keys[0], dictionary.values[0]);
printf("Dictionary: %s: %d\n", dictionary.keys[1], dictionary.values[1]);
printf("Dictionary: first: %d\n", get_int(&dictionary, "first"));
add_int(&dictionary, 1, "third", 2);
add_int(&dictionary, 1, "uno", 1);
/* printf("uno: %d\n", get_int(&dictionary, "uno"));
printf("third: %d\n", get_int(&dictionary, "third"));
printf("\n - !Program has finished! - \n");*/
return 0;
}
Кроме того, код работает нормально, если я вызову add_int()
только один раз, поэтому, если бы я только добавил один элемент к моему dict_int
, это не выдало бы ошибку, поэтому я предполагаю, что он имеетчто-то делать с памятью ...
Кроме того, я попытался удалить все части add_int()
, которые включали realloc()
, чтобы доказать свою теорию, и без realloc()
, кажется,работать просто отлично ...
Итак, просто знайте, что я очень благодарен вам за то, что вы прочитали этот вопрос, и я был бы еще более благодарен, если бы вы были так добры и попыталисьскажи мне, что я делаю не так, потому что, к сожалению, я не могу понять - Матиас