C++之delete常见错误总结

120 阅读1分钟

1、动态分配内存后释放了一次,再次释放

1)直接删除2次

int main()
{
   int *a = new int(50);
   cout<<*a<<endl;
   delete a;
   delete a;
   return 0;
}

2)另外一个指针指向分配的内存,然后把这个2个指针都删除

int* p1 = new int(50);
int* p2 = p1; //p2和p1 现在指向同一内存地址
cout << *p1 << endl;
cout << *p2 << endl;
delete p1; //OK
delete p2; //ERROR! p2所指的内存,已通过delete p1而被释放,不可再delete一次

 

 

 

2、删除是一个普通指针或者不是一个指针

1)删除的是一个普通指针

nt  a = 50;
int *p = &a;
delete p

2) 删除的不是一个指针

string ss = "chenyu";
delete ss;

 

 

3、删除了由系统释放