簡體   English   中英

按 C 中的塊重新分配 char 數組(字符串)

[英]Reallocating char array (string) by chunks in C

If I use chunks to reallocate memory for, let's say, every ten characters I read from console with getchar() function in C, and count every new char (position) with counter++, when I'm done with the word I'm on ,如果我將 '\0' 添加到數組中的最后一個 position (由計數器標記),我會擺脫多余的分配空間嗎?

例如,如果我希望輸入是人的姓名和姓氏(新行表示我正在處理的字符串數組中的新字符串):
安娜·約翰遜
馬克吐溫
加布邁克爾森

“Mark Twen”是 9 個字符,我在字符串末尾再添加一個,我已經用完了分配塊中的所有 10 個位置。 但是“Gabe Michaelson”是 15 個字符,如果我在第 16 位添加 '\0'(從 1 開始計數;或第 15 位,從 0 開始計數),我會浪費(泄漏???)memory 由 4 個剩余的未使用位置表示,或者字符串數組中的每個字符串是否都有自己的長度而沒有任何泄漏/然后需要使用更多的 memory?

不,添加\0不會以任何方式釋放空間或影響 memory 的 rest。 實際上,如果您以后想要向字符串中添加更多字符,您可以這樣做,直至分配的空間量。

如果您真的想在最后釋放realloc ,唯一的方法是將其重新分配到更小的大小。 但是,對於幾個字節,這可能不會有太大幫助,因為malloc不太可能能夠使用這么小的塊,特別是考慮到每個塊通常有很多字節的開銷。 因此,如果您的塊大小相對較小,最好不要管它,並接受一些字節將被浪費 - 在大多數情況下它應該是微不足道的。

這並不是真正的泄漏,因為當您最終free() “Gabe Michaelson”字符串時,最后未使用的字節也將被釋放。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM