我知道不应该将 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 个位置的块,尽管我可以 new/delete 管理其中的整数。