热门

最新

红包

立Flag

投票

同城

我的

发布
hydelios
hydelios
6 年前
truehydelios

写了个类,类里在堆上创建了个数组空间,调用的时候直接对数组指针++了
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;
}

CSDN App 扫码分享
分享
评论
4
打赏
  • 复制链接
  • 举报
下一条:
make command not found解决办法:sudo apt install make
立即登录