簡體   English   中英

使用realloc的C struct內存分配

[英]C struct memory allocation using realloc

我使用以下代碼來通過增加大小size並重新分配內存來向我的Struct數組( mystructs )動態分配更多內存:

int size = 1;   
MyStruct *mystructs = NULL;
MyStruct *tmp = NULL;
tmp = realloc(mystructs, sizeof(MyStruct) * size);
mystructs = tmp;

我的問題是,即使我使用size = 1它仍然會分配比該大小所需的內存更多的內存,因為當我開始使用printf()打印出結構值時,盡管它通常可以打印出數百個數組元素應該只包含1個元素。 打印出來意味着調用類似的東西: printf("%d", mystructs[i].value); 為什么在i最終發現段錯誤之前,由於我不應該訪問內存,所以為什么i的值可能是幾百?

由於讀取超出分配的空間是不確定的行為,因此它的行為不一定總是完全相同,因此有可能讀取超出分配的空間,但這是不正確的。

有時會發生細分錯誤。

因此,您可以毫無問題地繼續閱讀,並且突然出現segmentation fault

能夠讀取內存並不意味着您可以這樣做。

正如其他人指出的那樣,該庫可能只是從OS中獲得了比所需更多的內存。

但是也有可能它只使用位於其他內存之前的內存。

因此,即使您可以閱讀,也不應閱讀,因為您永遠不會知道。 而且,最重要的是:不要在那里寫-程序可能還會使用其他變量!

暫無
暫無

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

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