Yos*_*tik 0 c memory arrays memory-management realloc
我必须增加双数组的长度。我知道,如何用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;
}
Run Code Online (Sandbox Code Playgroud)
第一个数组工作正常。但是第二个消息粉碎了realloc(): invalid next size。
因此,有两个问题:
1.为什么这种方法不能在双数组中工作?
2.如何动态增加双精度数组的大小?
UPD:删除了错字
TL; DR:这两个代码段都是错误的,第一个代码段似乎由于未定义的行为而起作用。
详细地说,问题出在您的索引逻辑上。C使用基于0的索引。因此,在循环中,通过使用,从ias的值开始迭代1
tmp[i] = .......
Run Code Online (Sandbox Code Playgroud)
您正在尝试访问无效的内存,这时,仅可访问最多tmp[i-1]有效。
您需要使用tmp1[i-1] = 0;,同样。
那就是
永远不要使用表格
pointer = realloc (pointer, ......)
Run Code Online (Sandbox Code Playgroud)
因为如果realloc调用失败,您最终也会丢失原始指针。
引用C11第§7.22.3.5章
该
realloc函数返回指向新对象的指针(该值可能与指向旧对象的指针的值相同),或者如果无法分配新对象,则返回空指针。
和
[....]如果无法分配用于新对象的内存,则不会释放旧对象,并且其值不变。
realloc(),