标准specifies如果新大小更大,则重新分配空间的内容未定义。
如果保留先前分配空间的内容很重要,那么重新分配数据的最佳方法如下:将其复制到堆栈,将其从堆中释放,在具有更多空间的堆上分配,然后复制回堆?还有另一种安全的方法吗?
实现像只增长的动态增长数组这样的数据结构的最佳方式是以链表的形式实现吗?
最佳答案
“对象的新分配部分未指定”的内容。您的内容仍将位于返回的内存区域的开头。
说我愿意:
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',无论是否为 new p
与旧的 p
相同。剩下的 6 个"new"字符都是未定义的。
关于c - 重新分配数组 (C99),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3294396/