gpt4 book ai didi

c++ - delete[]有问题,如何部分删除内存?

转载 作者:太空宇宙 更新时间:2023-11-04 15:11:14 26 4
gpt4 key购买 nike

我们学习c++动态分配的时候,关于delete[]最简单的例子是:

int main()
{
size_t n = 5;
int *p = new int[n];
delete[] p;
}

用简单的英语来说,delete[] 能够从之前由 new 分配的堆内存中删除类似 C 的数组。但是,我收到以下代码的错误。

int main()
{
size_t n = 5;
int *p = new int[n];
p++; //move the pointer to the second element of the array
delete[] p;
}

我在想这是否可以删除相同的堆内存,但从第二个元素开始。但是,我遇到了一些我不明白的错误:

Test Prep(51600,0x1000d1dc0) malloc: *** error for object 0x100537134: pointer being freed was not allocated

最佳答案

就是undefined behaviour 删除 不是new分配的指针。 未定义的行为不一定会给出任何错误!

您正在更改指针以指向下一个元素 - 这不是 new 返回的内容。

无法按照您的意愿部分删除。您应该查看诸如 std::vector 之类的容器它支持(并管理分配)这种部分删除/调整大小。

关于c++ - delete[]有问题,如何部分删除内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58971779/

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