C++之delete常见错误总结
2017-03-19 21:49
816 查看
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、删除了由系统释放的指针
int* p = new int[50]; int chenyu[50]; p = chenyu; delete [] p;
我们是想把要释放p最初通过new int[50]而得到的内存空间,但事实上,p那时已经指向chenyu[100]了。结果,第一、最初的空间并没有被释放。第二、girl[100] 本由系统自行释放,现在我们却要强行释放它。
4、删除动态分配的指针的时候没有指向最初的地址
int *p = new int[3]; *p = 1; cout<<*p<<endl; *p++ = 2; cout<<*p<<endl; delete[] p;当一个指针通过 +,-等操作而改变了指向;那么在释放之前,应确保其回到原来的指向。如下所示:在 delete [] p 时,p指向的是第二个元素,结果该释放将产生错位:第一个元素没有被释放,而在最后多删除了一个元素
正确代码如下:
int *p = new int[3]; *p = 1; cout<<*p<<endl; *p++ = 2; p--; cout<<*p<<endl; delete[] p;
读者可以亲自测试错误,然后再去修正,这里就没有贴错误的效果是什么
相关文章推荐
- 基于C++中常见编译错误的总结详解
- C++常见错误总结
- C/C++语言常见错误一览表~~~总结的相当详细
- C/C++之函数返回值为指针或者是引用时常见错误总结
- 基于C++中常见内存错误的总结
- C/C++实战常见错误总结及注意事项【关注与Python的不同点】
- C++常见错误 - 总结2
- 基于C++中常见内存错误的总结
- C++常见编译错误分析总结
- C++中常见的错误 (总结)
- C和C++里面常见错误和异常出现怎么解决总结(不断更新)
- C++ 常见错误总结
- 基于C++中常见内存错误的总结
- 【C++初级】static用法总结、问题探讨及常见错误排查
- 基于C++中常见内存错误的总结
- C++常见错误总结(不定时更新版~)
- 基于C++中常见编译错误的总结详解
- 基于C++中常见内存错误的总结
- C++学习总结_指针常见错误
- delete常见错误总结