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