C语言内存分配管理常见bug
来源:互联网 发布:香港应知净水器 编辑:程序博客网 时间:2024/05/20 09:26
标准C库提供了4个内存管理函数:malloc、calloc、realloc和free。
bug1
调用free释放p指向的内存块之后,p就是一个悬挂指针——指向逻辑上不存在的内存的指针。如果引用这个悬挂指针,会导致不可预见的错误。
ElemType* p = (ElemType*)malloc(sizeof(ElemType) * NUM);...free(p);// p = NULL;...*p = "...";
bug2
释放空闲内存,破坏内存管理函数所用的数据结构。
ElemType* p = (ElemType*)malloc(sizeof(ElemType) * NUM);...free(p);...free(p);
bug3
释放并非malloc、calloc或realloc分配的内存。
ElemType buf[20], *p;if(n >= sizeof(buf){ p = (ElemType*)malloc(sizeof(ElemType) * NUM);}else{ p = buf;}...free(p);
bug4
1、没有考虑内存分配不成功的情况。如果分配失败应返回NULL;
2、使用后没有释放内存,多次调用会导致内存泄漏;
void itoa(int n, char *buf, int size){ char *p = malloc(43); sprintf(p, "%d", n); if(strlen(p) >= size-1){//如果数字个数大于size-1时,用*填充。 while(--size > 0){ *buf++ = '*'; } *buf = '\0'; }else{ strcpy(buf, p); }}
初学者更容易犯下面的错误。itoa试图返回buf的内容,但itoa返回后,buf已经被清空了。
char *itoa(int n){ char buf[43]; sprintf(buf, "%d", n); return buf;}
Wu_Being博客声明:本人博客欢迎转载,请标明博客原文和原链接!谢谢!
《C语言内存分配管理常见bug》: http://blog.csdn.net/u014134180/article/details/78335307
如果你看完这篇博文,觉得对你有帮助,并且愿意付赞助费,那么我会更有动力写下去。
阅读全文
0 0
- C语言内存分配管理常见bug
- C语言常见的内存分配
- C语言—常见的内存分配函数
- C语言中的内存分配方式及常见错误
- C语言内存分配
- C语言内存分配
- c语言内存分配
- C语言-内存分配
- C语言内存分配
- C语言内存分配
- c语言内存分配
- C语言内存分配
- C 语言内存分配
- C语言内存分配
- C语言内存分配
- c语言内存分配
- c语言内存分配
- C语言内存分配
- Vue.JS React 精彩文章汇总
- luogu2680【2015提高】运输计划(二分答案+lca+树上差分前缀和)
- 谁的代码注释我都不服,就服你的!
- Ext.NET-布局篇
- 杂七杂八
- C语言内存分配管理常见bug
- 【git基础】git简易入门
- (通用)深度学习环境搭建:tensorflow安装教程及常见错误解决
- Windows_jdk环境配置解释
- Raw_Socket原始套接字
- Codeforces Round #442(Div.2)Problem D Olya and Energy Drinks(BFS)
- 2017.10.24
- KVM(桥接模式)宿主机创建网桥
- hdu 4135(容斥原理)