Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重新分配阵列(C99)_C_Memory Management_C99 - Fatal编程技术网

重新分配阵列(C99)

重新分配阵列(C99),c,memory-management,c99,C,Memory Management,C99,重新分配的空间的内容未定义的标准,如果新大小更大 如果保留以前分配的空间的内容很重要,那么按如下方式重新分配数据的最佳方法是:将数据复制到堆栈中,将其从堆中释放出来,在堆上分配更多空间,然后复制回堆?还有其他安全的方法吗 实现像只增长的动态增长数组这样的数据结构的最佳方法是以链表的形式吗?对象的新分配部分的内容未指定。您的内容仍将位于返回的内存区域的开头 说我愿意: char *p = malloc(6); if(p == NULL) { ... } memcpy(p, "Hello", 6);

重新分配的空间的内容未定义的标准,如果新大小更大

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

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

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

说我愿意:

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

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

只有内存的新部分未定义。例如,如果您有一个包含10个元素的数组,并且您认为它足够大,可以容纳20个元素,那么最后10个元素将是未定义的。

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

无需破解,只需realloc()。

“标准规定,如果新大小更大,则重新分配空间的内容未定义。”

不,没有。它说:

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

只有新零件的内容未指定。realloc之后什么都不会丢失