[英]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 = §ions[num_sections++]; // Newly available section
section->num_lines = 0;
section->lines = 0;
return section;
(我假設使用C99-在需要的地方帶有變量聲明。)
一個節中的行數組也適用類似的過程,除了節結構沒有分配的行數和實際使用的行數的單獨值。 當然,每一行都有自己分配的用於字符串的內存...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.