delete[]有问题,如何部分删除内存? 学习C++中的动态分配时,删除[]的最简单的例子是: int main() { size_t n = 5; int *p = new int[n]; delete[] p; }
简单地说,delete[]能够从堆内存中删除一个类似C的数组,该内存以前是由新用户分配的。但是,我得到了以下代码的错误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; } 我在想,这是否可以删除相同的堆内存,但从第二个元素开始。然而,我得到了一些我不理解的错误
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可能会重新分配。我一直认为它会通过某种魔法缩短时间。