【发布时间】:2015-05-20 14:11:26
【问题描述】:
假设我有以下 sn-p。
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++ 是否分配不同的内存空间?
operator delete 是否只删除 last 分配的 cost 数组?
【问题讨论】:
-
要添加到答案中指出的错误,您还有一个比内存泄漏更糟糕的错误:如果您的
while执行 0 次,那么您将有一个delete[]没有任何对应的new[],等等一个未初始化的指针。这是未定义的行为,实际上可能会使您的程序崩溃。 (好吧,在程序结束后发生一条指令可能不会那么戏剧化,但这不是一个漂亮的景象。) -
你不能多次分配一个数组。可以分配多个数组。
-
您没有多次分配“the”数组。您正在分配“一个”数组。名称
cost是指针的名称,而不是数组的名称。
标签: c++ arrays memory memory-management new-operator