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