C Realloc错误 - struct中的动态数组

时间:2018-06-12 17:22:28

标签: c arrays memory struct realloc

首先非常感谢你帮助我,或者至少看看我的问题,也许告诉我,我做错了什么。

好的,所以我最近遇到了realloc()抛出分段错误错误的问题,当用于扩展typedef struct中的数组时,或者至少在我的情况下这样做。

我试图在网上和其他网页上找到解决方案,但遗憾的是我似乎无法找到解决方案。这就是为什么我真的希望你们中的一个能够如此友好地帮助我。

非常感谢你, 的Matthias

顺便说一下。在这里,我附加了提供错误的代码。

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()的{​​{1}}的所有部分,以证明我的理论,并且没有realloc()它似乎工作得很好......

所以,只要知道我非常感谢你,因为只是通过这个问题来阅读,如果你是如此善良,我会更加感激,并试图告诉我我做错了什么,可悲的是,我无法弄清楚。 - 马蒂亚斯

0 个答案:

没有答案