gpt4 book ai didi

c++ - 如果我在 C++ 中使用 operator new[] 分配一个对象数组,但单独解除分配它们是否仍然构成内存泄漏?

转载 作者:太空狗 更新时间:2023-10-29 23:46:06 26 4
gpt4 key购买 nike

我知道不应该将 new[] 与 delete 混合搭配,反之亦然(delete[] 与 new)。所以

int* k = new int[5];
delete k;

有缺陷,因为它不会释放分配的数组。但是下面是错误的吗?

int *k = new int[5];
for (int i = 0; i < 5; ++i)
delete k[i];

我的意思是错误 - 它实际上会导致内存泄漏或未定义的行为吗?

编辑** 不好意思,我想输入的是:

int** k = new int*[5];
memset(k, 0, sizeof(int*)*5);

k[3] = new int;

for (int i = 0; i < 5; ++i)
if (k[i])
{
delete k[i];
k[i] = 0;
}

在上面,除非我在 k 本身上调用 delete[],否则 5 个位置的 block 实际上永远不会被释放,尽管我可以 new/delete 管理其中的整数。

最佳答案

k[i] 是一个 int,因此对其调用 delete语法无效。编译器应引发错误。

即使你可以,它也会导致未定义的行为(比如你有一个指针数组,你用 new[] 分配并尝试用 delete 删除它).将 new[]deletenew[]delete 混合会导致 UB。

关于c++ - 如果我在 C++ 中使用 operator new[] 分配一个对象数组,但单独解除分配它们是否仍然构成内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13692112/

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