【发布时间】:2020-03-17 10:32:51
【问题描述】:
我必须动态增加双精度数组的长度。我知道,如何用 char 数组来做,所以我尝试了这个:
int main() {
char * tmp = NULL;
for (int i = 1; i <= 4; i++) {
tmp = realloc(tmp, i * sizeof(char));
tmp[i] = 'i';
}
puts("char OK");
double * tmp1 = NULL;
for (int i = 1; i <= 4; i++) {
tmp1 = realloc(tmp1, i * sizeof(double));
tmp1[i] = 0;
}
return 0;
}
第一个数组工作正常。但是第二个被消息realloc(): invalid next size粉碎。
这是我的两个问题:
- 为什么这种方式在双数组中不起作用?
- 如何动态增加双精度数组的大小?
更新: 删除了一个错字
【问题讨论】:
-
你认为
i * sizeof(double)是什么时候i是0,当你尝试tmp1[i] = 0;时会发生什么? -
抱歉,打错了。但无论如何,在重新分配期间仍然会发生错误
-
不要在此处重新输入您的代码,而是粘贴您的实际代码。
-
@Yoskutik 效果是一样的:如果你分配了
i * <element size>,array[i]不存在并且访问它是未定义的行为。
标签: c arrays memory memory-management realloc