重新分配数组(C99)

Ykt*_*ula 2 c memory-management c99

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

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

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

Mat*_*hen 5

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

说我同意:

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

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