C/C++ 错误笔记-如果要释放内存,必须拿到内存的首地址进行释放

例:修改字符串的第三个字母为a文章来源地址https://www.yii666.com/article/754021.html

#include <stdlib.h>
#include <string.h>
#include <stdio.h> #pragma warning(disable:4996) void main() { char *p = (char *)malloc();
strcpy(p,""); p = p + ;
*p = 'a';
free(p); system("pause"); }

运行,VS报下列错误:

C/C++ 错误笔记-如果要释放内存,必须拿到内存的首地址进行释放文章地址https://www.yii666.com/article/754021.html网址:yii666.com

出现这个问题的原因是,C语言规定:如果要释放内存,必须拿到内存的首地址进行释放

而p指针在释放之前,进行了移位操作,不再指向首地址,因此程序发生crash。解决办法:只需要保存首元素的地址用来释放即可。

#include <stdlib.h>
#include <string.h>
#include <stdio.h> #pragma warning(disable:4996) void main() { char *p = (char *)malloc();
strcpy(p,"");
char *pHeader = p; p = p + ;
*p = 'a';
printf("%s\n", pHeader);
free(pHeader); system("pause"); }

运行结果:网址:yii666.com<文章来源地址:https://www.yii666.com/article/754021.html

C/C++ 错误笔记-如果要释放内存,必须拿到内存的首地址进行释放

版权声明:本文内容来源于网络,版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。文本页已经标记具体来源原文地址,请点击原文查看来源网址,站内文章以及资源内容站长不承诺其正确性,如侵犯了您的权益,请联系站长如有侵权请联系站长,将立刻删除

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信图片_20190322181744_03.jpg

微信扫一扫打赏

请作者喝杯咖啡吧~

支付宝扫一扫领取红包,优惠每天领

二维码1

zhifubaohongbao.png

二维码2

zhifubaohongbao2.png