delete运算符如何处理c中的指针



删除运算符在C++中如何工作?

int *ptr = new int[2];
delete[] ptr;

delete运算符如何知道分配的内存量,因为ptr只是一个int指针和递增ing(++(,它只会使它指向连续分配结构中的下一个位置。

分配器通常只在有问题的指针之前隐藏分配信息。分配包括这个空间,但指针会在它之后移动,所以你不会访问/修改它。这就是为什么在负索引处写入指针会严重破坏东西的部分原因。

正如注释中所指出的,由于您使用的是delete ptr;,而不是delete[] ptr;,因此您的代码在编写时已损坏;只有后者知道要查找销毁整个数组所需的信息,而不仅仅是单个元素。

最新更新