我已經開始編寫一個簡單的控制檯Yahtzee遊戲進行練習。我只是有一個關於這個函數是否會泄漏內存的問題。每次需要重新滾動骰子時都會調用滾動函數。C++會這個函數泄漏嗎?
它所做的是創建一個動態數組。第一次使用它會存儲5個隨機值。對於下一次運行,除了您想要保留的骰子外,它只會重新展開。我有另一個功能,但因爲它是不相關的這個問題,我離開了出來
主要功能
int *kast = NULL; //rolled dice
int *keep_dice = NULL; //which dice to re-roll or keep
kast = roll(kast, keep_dice);
delete[] kast;
與這裏的功能
int *roll(int *dice, int *keep) {
srand((unsigned)time(0));
int *arr = new int[DICE];
if(!dice)
{
for(int i=0;i<DICE;i++)
{
arr[i] = (rand()%6)+1;
cout << arr[i] << " ";
}
}
else
{
for(int i=0;i<DICE;i++)
{
if(!keep[i])
{
dice[i] = (rand()%6)+1;
cout << "Change ";
}
else
{
keep[i] = 0;
cout << "Keep ";
}
}
cout << endl;
delete[] arr;
arr = NULL;
arr = dice;
}
return arr;
}
有人告訴過你在刪除它們後總是給NULL指定NULL嗎?他們錯了。 – 2010-01-21 15:27:47
'arr = NULL; arr =骰子;'相當多餘。 :]如果即使只進行了第一級優化,該行也不會存在於編譯後的輸出中。 ('arr = NULL;') – GManNickG 2010-01-21 15:35:47
@Steve:我記得在書中讀到它。是什麼讓它錯了?我認爲這只是出於安全原因。 – jasonline 2010-01-21 15:35:57