繁体   English   中英

重新分配数组(C99)

[英]Reallocating an array (C99)

该标准指定如果新大小更大,则重新分配空间的内容是不确定的。

如果保留先前分配的空间的内容很重要,那么重新分配数据的最佳方法如下:将其复制到堆栈,从堆中释放它,在堆上分配更多空间,然后复制回堆? 还有另一种安全的方法吗?

实现数据结构的最佳方法是像动态增长的数组一样只能以链表的形式增长吗?

“未分配对象的新分配部分”的内容。 您的内容仍将位于返回的内存区域的开头。

说我同意:

char *p = malloc(6);
if(p == NULL) { ... }
memcpy(p, "Hello", 6);
char *temp = realloc(p, 12);
if(temp == NULL) { ... }
p = temp;

p的前6个字符保证为'H','e','l','l','o','\\ 0',无论新p是否与旧p相同。 其余6个“新”字符都是未定义的。

“如果新的大小更大,标准规定重新分配空间的内容是不确定的。”

不,不。 它说:

“物体的内容应保持不变,直至新旧尺寸中的较小者。” “如果新的大小较大,则未指定新分配的对象部分的内容。”

仅指定新部件的内容。 realloc之后没有任何东西丢失。

你误读了这个页面。 它说:“物体的内容应保持不变,直至新旧尺寸中的较小者。”

不需要hacks,只需realloc()。

只有内存的新部分未定义。 例如,如果你有一个包含10个元素的数组,并且你将它重新分配给20个元素足够大,那么最后10个元素将是未定义的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM