我已经开始编写一个简单的控制台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