我想我知道但我不想讓我的工作不正確。爲什麼realloc需要兩個指針?處理返回NULL?
你看到的是大部分的例子...
char* temp;
char* temp1;
temp = malloc(10, sizeof(char);
temp1 = realloc(temp, 11*sizeof(char));
現在我假設你不使用...
temp = realloc(temp, 11*sizeof(char));
因爲如果沒有足夠的內存,你得到一個NULL ptr返回,因此無法訪問原始內存塊。
那麼下面是處理返回NULL指針的好方法嗎?
while((temp1 = realloc(temp, 11*sizeof(char))) == NULL)
sleep(3);
temp = temp1;
temp1 = NULL;
我知道有些人說,當你在你的代碼中加入睡眠時,可能會有更好的方法。但我看到它的方式,我別無選擇,只能等待。
如果'realloc()'返回NULL,那麼你有嚴重的問題。不,這不僅是兩個指針是必要的原因。如果指針指向的內存塊被擴展,那麼它可能不再適合它的原始位置,所以'realloc()'將需要移動它,改變指針(並使其無效)。 – 2013-12-09 22:05:10
「睡眠」應該給操作系統一個移動內存的機會嗎?無論如何,我不認爲我會依賴一個*無限循環*,因爲它可能永遠循環。 – usr2564301
考慮失敗的操作或找到一些不必要的緩存/數據來刷新。睡眠不會幫助(單線程)應用程序用盡地址空間,因爲這與整個系統耗盡虛擬內存相反。 – doynax