我必须动态增加双数组的长度。我知道,如何用字符数组来做,所以我试过这个:
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
。
这是我的两个问题:
UPD:删除了一个错字
TL;DR:两个片段都是错误的,第一个片段似乎由于未定义的行为而起作用。
详细说明,问题在于您的索引逻辑。C 使用基于 0 的索引。因此,在从i
as 的值开始迭代的循环中1
,通过使用
tmp[i] = .......
你试图访问无效的内存,此时,只有访问tmp[i-1]
是有效的。
您需要使用tmp1[i-1] = 0;
,同样如此。
那说,
永远不要使用表格
pointer = realloc (pointer, ......)
因为,如果realloc
调用失败,您最终也会丢失原始指针。
引用C11
,章节 §7.22.3.5
该
realloc
函数返回一个指向新对象的指针(它可能与指向旧对象的指针具有相同的值),如果无法分配新对象,则返回一个空指针。
和
[....] 如果无法为新对象分配内存,则不会释放旧对象并且其值不变。
realloc()
,本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句