写了个类,类里在堆上创建了个数组空间,调用的时候直接对数组指针++了
p1.arr[0]=2;
p1.arr[1]=2;
cout<<p1.arr++<<endl;
cout<<p1.arr<<endl;
cout<<&p1.arr[0]<<endl;
最后析构的时候,报了pointer being freed was not allocated的错误,大意是释放了没有分配的空间。由于这个arr是公开的属性,所以,改变了指针的首地址,然后delete[] this->arr;这个语法大概会释放掉之前分配长度的栈空间,所以就尾部超出了一个数据长度的空间。当我最后调整回arr一开始的首地址后,就不报错了。
可以看出delete[] 这个语句的本质是啥。
if(this->arr!=NULL)
{
delete[] this->arr;
this->arr=NULL;
this->m_capacity=0;
this->m_size=0;
}