跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 国内电商 > 【C语言】常见的动态内存管理错误

【C语言】常见的动态内存管理错误

时间:2024-03-30 12:05:51 来源:网络cs 作者:淼淼 栏目:国内电商 阅读:

标签: 管理  错误  动态  语言 
阅读本书更多章节>>>>

前言

上一篇介绍了C语言中 动态内存管理函数,本片讲解的是 在我们使用动态内存管理时 常见的错误,一起来看看吧~

欢迎关注个人主页:逸狼


创造不易,可以点点赞吗~

如有错误,欢迎指出~


目录

1.对NULL指针的解引⽤操作

错误代码展示

修改

2.对动态开辟空间的越界访问

错误代码展示

修改

3 .对⾮动态开辟内存使⽤free释放

错误代码展示

4 .使⽤free释放⼀块动态开辟内存的⼀部分

错误代码展示

5. 对同⼀块动态内存多次释放

错误代码展示

修改

6.动态开辟内存忘记释放(内存泄漏)

错误代码展示

修改​编辑


1.对NULL指针的解引⽤操作

错误代码展示

int main(){int* p = (int*)malloc(100);*p = 20;//p有可能是NULL指针    //释放free(p);p = NULL;return 0;}

修改

2.对动态开辟空间的越界访问

错误代码展示

int main(){int *p=(int*)malloc(40);if (p == NULL){return 1;}//使用for (int i = 0; i <= 10; i++){*(p + i) = i;//当访问第11个元素时,就越界访问了}free(p);p = NULL;return 0;}

修改

3 .对⾮动态开辟内存使⽤free释放

错误代码展示

int main(){int a = 10;//⾮动态开辟内存int* p = (int*)malloc(40);if (p == NULL){return 1;}//使用//……p = &a;//p指向的空间不再是堆区上空间了free(p);p = NULL;return 0;}

4 .使⽤free释放⼀块动态开辟内存的⼀部分

错误代码展示

void test(){    int *p = (int *)malloc(100);    if (p == NULL)return 1;    //使用    p++;    //释放    free(p);//p不再指向动态内存的起始位置 }

5. 对同⼀块动态内存多次释放

错误代码展示

void test(){int* p = (int*)malloc(100);if (p == NULL){return 1;}free(p);free(p);//重复释放 }

修改

6.动态开辟内存忘记释放(内存泄漏)

malloc、calloc、realloc申请的空间如果不主动释放,出了作用域不会销毁
释放的方式

free主动释放直到程序结束,由操作系统回收

malloc函数出了test函数申请的空间不会销毁,造成内存泄漏

错误代码展示

void test(){int* p = (int*)malloc(100);if (NULL != p){*p = 20;}}int main(){test();while (1);}

修改

阅读本书更多章节>>>>

本文链接:https://www.kjpai.cn/guonei/2024-03-30/150819.html,文章来源:网络cs,作者:淼淼,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论