c - 重新分配数组 (C99)

标签 c memory-management c99

标准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/

相关文章:

c++ - 无法找到 C++ 标准库头文件中未定义的宏

c++ - ora-24399-指定的连接数无效 -OCCI 程序

memory-management - Informix - 如何释放内存?

c++ - 为什么默认由value_type参数化std::list分配器?

c++ - 在 C++ 中的堆中删除从 Char[] 创建的堆上的字符串

c - C宏中参数的变量号

c - 奇怪的 XLib 错误; XDrawString 仅在 sleep 后有效

C 查找作为参数传递的列表的最后一个元素

c - Valgrind 读取大小无效

编写就地浮点型提升循环的正确方法?