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;
}