c - C Realloc 错误 - 结构中的动态数组
问题描述
首先非常感谢你试图帮助我,或者至少看看我的问题,也许告诉我,我做错了什么。
好的,所以我最近遇到了realloc()
引发分段错误错误的问题,当用于扩展 a 中的数组时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()
包括 a 在内的所有部分realloc()
,以证明我的理论,没有realloc()
它似乎工作得很好......
所以,只要知道我非常感谢你,只是阅读了这个问题,如果你这么好心,并试图告诉我我做错了什么,我会更加感激,因为可悲的是,我想不通。- 马蒂亚斯
解决方案
推荐阅读
- bash - 这个涉及“查找”和“此处字符串”的命令是如何执行的?
- java - Java Files.Copy 删除第一个文件的内容
- r - 如何在面板空间模型中包含解释变量的空间滞后?
- amazon-web-services - AWS-DeepLens:如何在 S3 中访问预训练模型以进行对象识别
- vba - 逐行连接所有列
- python - 如何添加/添加两个或多个 Python 字典?
- python - UI 不接受文件丢弃
- javascript - 如何在消息框弹出窗口上对按钮进行样式设置
- azure-cognitive-services - 在图像中查找徽标
- qt5 - 如何在 QCreator 中更改可执行文件的路径?