动态内存分配— —常见错误总结
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;
}
posted on 2022-11-13 10:01 会飞的鱼-blog 阅读(22) 评论(0) 编辑 收藏 举报 来源
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)