[英]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.