1. 申请的内存多次释放
2. 内存泄漏
3. 释放的内存不是申请时的地址
4. 释放空指针
5. 释放一个内存块,但继续引用其中的内容
6. 越界访问
以下是代码解释:
// demo 9-9.c #include <iostream> #include <stdlib.h> using namespace std; int main() { int* p = new int[18]; p[0] = 0; char* p1 = NULL; //1.申请的内存多次释放, 程序出现异常 //... ... //... ... //delete[] p;//只允许一次释放 //... ... //... ... //delete[] p; //2. 忘记 delete,内存泄漏 /* do { }while(1==1); */ //3.释放的内存不是申请时的地址 /*for(int i=0; i<18; i++) { cout<<*(p++)<<endl; } delete [] p;*/ //4.释放空指针 // ... ... /*if(1==0) { //比如文件能打开的情况 p1 = new char[2048]; } ... ... delete p1; */ //5.释放一个内存块,但继续引用其中的内容 /*delete[] p; // ...继续码代码... p[0]= '\0';//绝对禁止 */ //6.越界访问 memset(p, 0, 18 * sizeof(int)); for (int i = 0; i < 18; i++) { cout << *(p++) << endl; } //误判 for (int i = 0; i < 18; i++) { cout << *(p++) << endl; } cout << "come here!" << endl; system("pause"); return 0; }