簡體   English   中英

在重新分配內重新分配

[英]realloc inside a realloc

在C中,您可以在realloc內部擁有realloc嗎? 例如,當您需要同時分配它們和重新分配它們時,該結構內部的結構。 如果可以,請提供一個簡單的例子嗎? 先感謝您。

您的問題目前還不清楚,但是...

是的,給定的動態分配的結構(例如,結構數組)本身可以包含指向分配的數據的指針(例如,分配的結構的其他各個數組),並且您可以獨立地重新分配各個部分。

但是,當您重新分配其中一種結構時,系統不會為您調用realloc() 您將不得不分別編程各種調整大小的操作。

嵌套數據結構示例:

struct line { char *info; size_t length; };

struct section { size_t num_lines; struct line *lines; };

您可以分配一個節數組,並在需要時重新分配該數組。 每個部分包含一個線陣列,並且這些線陣列中的每一個也可以獨立地重新分配。


因此:

size_t num_sections = 0;
size_t max_sections = 0;
struct section *sections = 0;

if (num_sections == max_sections)
{
     size_t new_max = (max_sections + 1) * 2;
     struct section *new_sections;
     if (sections == 0)
         new_sections = malloc(new_max * sizeof(*new_sections));
     else
         new_sections = realloc(sections, new_max * sizeof(*new_sections));
     if (new_sections == 0)
         ...out of memory error...
     sections = new_sections;
     max_sections = new_max;
 }
 struct section *section = &sections[num_sections++];  // Newly available section
 section->num_lines = 0;
 section->lines = 0;
 return section;

(我假設使用C99-在需要的地方帶有變量聲明。)

一個節中的行數組也適用類似的過程,除了節結構沒有分配的行數和實際使用的行數的單獨值。 當然,每一行都有自己分配的用於字符串的內存...

暫無
暫無

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

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