gpt4 book ai didi

c++ - 如果我在 C++ 中删除了一次数组,但分配了多次怎么办?

转载 作者:IT老高 更新时间:2023-10-28 21:45:37 25 4
gpt4 key购买 nike

假设我有以下代码段。

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是否只删除last分配的cost数组?

最佳答案

Does C++ allocate different memory spaces each time I use operator new?

是的。

Does operator delete only delete the last allocated cost array?

是的。

您丢失了指向其他人的唯一指针,因此它们被不可挽回地泄露了。为避免这个问题,不要玩弄指针,而是使用 RAII自动管理动态资源。 std::vector 在这里将是完美的(如果您确实需要一个数组;您的示例可以继续读取并重复使用单个 int)。

关于c++ - 如果我在 C++ 中删除了一次数组,但分配了多次怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30352206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com