首先非常感谢你帮助我,或者至少看看我的问题,也许告诉我,我做错了什么。
好的,所以我最近遇到了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()
它似乎工作得很好......
所以,只要知道我非常感谢你,因为只是通过这个问题来阅读,如果你是如此善良,我会更加感激,并试图告诉我我做错了什么,可悲的是,我无法弄清楚。 - 马蒂亚斯