假设我有以下代码段。
int main()
{
int num;
int* cost;
while(cin >> num)
{
int sum = 0;
if (num == 0)
break;
// Dynamically allocate the array and set to all zeros
cost = new int [num];
memset(cost, 0, num);
for (int i = 0; i < num; i++)
{
cin >> cost[i];
sum += cost[i];
}
cout << sum/num;
}
` `delete[] cost;
return 0;
}
虽然我可以在while循环内移动
delete
语句就我的代码而言,出于理解目的,我想知道代码编写过程中会发生什么。每次我使用运算符
new
时,C++都会分配不同的内存空间吗?运算符
delete
是否仅删除最后分配的cost
数组? 最佳答案
是。
是。
您丢失了指向其他对象的唯一指针,因此它们不可避免地泄漏了。为避免此问题,请不要弄乱指针,而应使用RAII自动管理动态资源。 std::vector
在这里是完美的(如果您实际上确实需要一个数组;您的示例可以继续阅读并重复使用一个int
)。
关于c++ - 如果我在C++中一次删除了一个数组,但是多次分配了该怎么办?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30352206/