簡體   English   中英

使用malloc和realloc的最佳方法

[英]Best way of using malloc and realloc

我是使用malloc和realloc的新手,我有幾個問題。

問題1

我正在制作的游戲允許您創建自己的spacechip,知道我想知道的是,重新分配當前標准內存的兩倍更好。 還是按照需要的頂點重新分配100個額外空間的方式來做? 我個人認為seccond選項會更好,但也許有些我不知道。

問題2

如果我有一個正方形分配的數組[20] [4]如何將其重新分配為正方形的大小[100] [4]? 我是否將第一個數組重新分配為100,然后使用4個新點malloc 20-99?

問題3

現在,當我重新分配數據時,會發生一些奇怪的事情。 如果我放下一個斷點,一切都會很好,但是如果我讓代碼立即全部工作,它就會崩潰。 所以我猜有內存泄漏。 現在,這是我的重新分配代碼。

unsigned char *temp =( unsigned char* ) realloc(realSpaceship, gridSize*sizeof( unsigned char ));
if(temp != NULL)
{
    realSpaceship = temp;
    //free(temp); Line is now deleted at the advice of the helpfull people here.
}
else
{
    //error
    printf("realloc error\n");
    free(realSpaceship);
}

我認為釋放溫度是個好主意,但這只是導致代碼崩潰在另一個位置。

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!

我只是意識到問題不在於realloc,而是其他地方。

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!

一小撮額外的信息。 我正在使用c ++而且我也在使用glm

老實說,避免多次使用realloc 一次執行malloc並堅持使用,直到遇到極端情況,然后重新realloc (但即使如此,也要避免!)

這樣做的主要原因是調試和測試。 如果程序在realloc失敗,則可能是由於多種原因...而其中大多數來自操作系統。 (即沒有足夠的內存,試圖使用剛剛釋放的內存,等等。)這些都是很難重現和調試的錯誤。

做一些數學運算,計算出用例所需的最大值,並對其進行malloc 繼續編碼其他內容。 調試重新realloc錯誤並不有趣。

暫無
暫無

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

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