Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
delete[]有问题,如何部分删除内存? 学习C++中的动态分配时,删除[]的最简单的例子是: int main() { size_t n = 5; int *p = new int[n]; delete[] p; }_C++ - Fatal编程技术网

delete[]有问题,如何部分删除内存? 学习C++中的动态分配时,删除[]的最简单的例子是: int main() { size_t n = 5; int *p = new int[n]; delete[] p; }

delete[]有问题,如何部分删除内存? 学习C++中的动态分配时,删除[]的最简单的例子是: int main() { size_t n = 5; int *p = new int[n]; delete[] p; },c++,C++,简单地说,delete[]能够从堆内存中删除一个类似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; } 我在想,这是否可以删除相同的堆内存,但从第二个元素开始。然而,我得到了一些我不理解的错误

简单地说,delete[]能够从堆内存中删除一个类似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
它只是删除一个不是由new分配的指针。未定义的行为不一定会产生任何错误

您正在将指针更改为指向下一个元素——这不是new返回的内容


无法按您的要求部分删除。您应该查看一些容器,例如哪些容器支持并管理分配,例如部分删除/调整大小。

不,这不是工作原理。您必须删除从new中获得的确切指针,因为您使用p++对其进行了修改,所以它不再是同一个指针。你不能只删除其中的一部分,要么全部删除,要么什么都不删除。天哪,我刚学到,std::vector::shrink_to_fit可能会重新分配。我一直认为它会通过某种魔法缩短时间。