Ошибка Realloc - Динамический массив в структуре - PullRequest
0 голосов
/ 12 июня 2018

прежде всего большое спасибо за попытку помочь мне или хотя бы взглянуть на мою проблему и, возможно, сказать мне, что я делаю не так.

Хорошо, так что я недавно столкнулсяпроблема в том, что 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(), кажется,работать просто отлично ...

Итак, просто знайте, что я очень благодарен вам за то, что вы прочитали этот вопрос, и я был бы еще более благодарен, если бы вы были так добры и попыталисьскажи мне, что я делаю не так, потому что, к сожалению, я не могу понять - Матиас

...