博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言内存分配管理常见bug
阅读量:6647 次
发布时间:2019-06-25

本文共 1022 字,大约阅读时间需要 3 分钟。

标准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》:

Wu_Being 吴兵博客接受赞助费二维码

如果你看完这篇博文,觉得对你有帮助,并且愿意付赞助费,那么我会更有动力写下去。

你可能感兴趣的文章
Flex4.6项目本地右键编译正常,部署后访问不了图片资源。解决
查看>>
windows7安装oracle安装提示:指定的SID在本机上已经存在的解决方法汇总
查看>>
iOS9+Swift开发经验不定期汇总(2): 企业账号应用不受信任,自定义Navigation Controller左上角返回按钮,CLLocationManager停止获取GPS等...
查看>>
PostgreSQL 事务,会话 GUC 变量 妙用
查看>>
我要做 Android 之 Java基础
查看>>
Linux图形界面与字符界面切换
查看>>
dwarfdump解析线上崩溃日志dSYM文件
查看>>
listview放入scrollview
查看>>
linux awk命令详解
查看>>
人工智能与智能体系中的先驱人物
查看>>
OkHttp Log Interceptor
查看>>
Httpwatch教程
查看>>
关于 linux 网速 提速的解决
查看>>
File()文件参数安全问题,求大神解答!!!急急急
查看>>
js之实现十六进制随机取色
查看>>
用 react + react-router + redux + webpack + es6 写的个人博客
查看>>
在win7下安装SQL sever2005(完整版)
查看>>
php解决下单、抽奖并发导致的库存负数的问题
查看>>
Windows Time Services 故障的回复
查看>>
iotop命令
查看>>