关于free函数报错问题

原创 2007年09月20日 13:32:00
 

  在VC 6.0 下编译的C程序,源代码如下:

#include <stdio.h>
#include <string.h>
#include <malloc.h>

int main()
{
 char *s, *t;
 char *r; 

 s = "Hello ";
 t = "world!/n";
 r = (char *)malloc(strlen(s) + strlen(t));
 strcpy(r, s);
 strcat(r, t);
 printf(r);

 free(r);
 return 0;
}

 

  编译和连接都没有问题,但是在运行的时候出现:

Debug Error!

DAMAGE:after Normal block (#43) at 0x003707A8

 

  初步判断应该是在调用函数strcpy和strcat时,对r进行了修改,产生越界,从而释放内存失败。

检查以后果然发现在malloc(strlen(s) + strlen(t))时少分配了一个长度;(strlen函数去掉了字符串末尾的'/0'字符),导致在调用strcat的时候长度不够,因而重新动态分配了内存地址。

  将函数改为:

int main()
{
 char *s, *t;
 char *r; 

 s = "Hello ";
 t = "world!/n";
 r = (char *)malloc(strlen(s) + strlen(t) + 1);
 strcpy(r, s);
 strcat(r, t);
 printf(r);

 free(r);
 return 0;
}

就不再报错了!

 

 

 

内存写越界导致破环堆结构引起的崩溃问题定位经验[如报错malloc(): memory corruption或free(): invalid next size]

转载

free 一个指针时【 retval = HeapFree(_crtheap, 0, pBlock);】报错的原因

报错的位置 void __cdecl _free_base (void * pBlock) { int retval = 0; if (pBlock =...

C-FREE5 运行时出现 ld.exe报错 以及之后发生....

最近学生在用C-FREE5 时候,运行时,会报错,报错的文件是Id.exe。当时觉得很是诧异,不知道这个exe从何而来。 后来是让他们把程序重启,之后运行就可以的,但是在一些数值计算时,输出结果很是...

C-FREE5 出现 ld.exe报错 解决办法

因为入门是接触了C free,发现是蛮不错的一个IDE,但是用了很久一段时间之后,安装了MinGW发现不能用了。。 出问题之后换用了sublime text顶替了一段时间,今天闲着无聊,修理了下c-f...

[原创]关于ajax中eval()解析函数(json反馈值)报错问题

====================================================== 注:本文源代码点此下载 =============================...

STM32问题集之头函数路径报错

报错现象:error:  #5: cannot open source input file "usb_conf.h": No such file or directory 这是因为没有设置 STM3...

关于调用strcpy()函数时总是报错问题,5种方法解决!

【问题】 只要调用strcpy()函数在程序运行时,总是出现错误: error C4996: 'strcpy': This function or variable may be unsafe. Co...

2010-09-03 19:00 Windows 7 下安装Smtp的替代方法可以解决php 的mail()函数报错问题

一点点的自学PHP都出都是问题没办法只能一点点解决了。 今天遇到的问题是PHP mail()函数出现的问题: 错误提示:PHP Warning: mail() [function.mail]: F...

Oracle 10g 解决wm_concat函数超过4000报错问题

转:http://blog.itpub.net/28998293/viewspace-1353103/ Oracle 10g版本的wm_concat为varchar2(4000),在使用wm_con...

解决c语言中调用scanf()或者strcpy()函数报错问题

引言    最近在使用VS实现C语言程序的时候经常会遇到一些错误,但是这些函数的确是可以正确使用的,可能在vc++6.0上就可以正常运行,很多参考书的代码都是以vc++6.0为标准的代码,所以这样...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于free函数报错问题
举报原因:
原因补充:

(最多只允许输入30个字)