删除运算符在C++中如何工作?
int *ptr = new int[2];
delete[] ptr;
delete运算符如何知道分配的内存量,因为ptr只是一个int指针和递增ing(++(,它只会使它指向连续分配结构中的下一个位置。
分配器通常只在有问题的指针之前隐藏分配信息。分配包括这个空间,但指针会在它之后移动,所以你不会访问/修改它。这就是为什么在负索引处写入指针会严重破坏东西的部分原因。
正如注释中所指出的,由于您使用的是delete ptr;
,而不是delete[] ptr;
,因此您的代码在编写时已损坏;只有后者知道要查找销毁整个数组所需的信息,而不仅仅是单个元素。