首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

字符串free()有关问题,请问

2012-03-14 
字符串free()问题,请教#includestdio.h#includestring.h#include malloc.hvoidmain(){charstr[100]

字符串free()问题,请教
#include   <stdio.h>
#include   <string.h>
#include <malloc.h>
void   main()
{
char   str[100]   =   "kall ";
char   *   tstr;
tstr=(char   *)malloc(strlen(str));
strcpy(tstr,str);  
printf( "%s\n ",tstr);
//free(tstr);   //free以\0结束释放
}
上述程序会正常输出,结果为:kall。不管malloc()的参数是strlen(str)还是strlen(str)+1,都能正常输出kall!

但是如果不注释掉free(tstr),并且malloc(strlen(str))时,运行时就会出debug   error错误!

free()通过指针tstr已经知道要释放空间的类型和大小了,即char类型,strlen(str)个字节空间。那么为什么会出现上面的错误呢!


[解决办法]
你的程序主要问题是这个函数:
strcpy(tstr,str);
这个函数会一直copy,str这个字串,知道 '\0 '终止,所以如果 "kall "后一个地址的值不是 '\0 '就会拷贝更多的字符到tstr指向的内存连续地址。这样在释放的时候,系统发现要释放的内存大小与申请的不同,就会出错了
不知道这种理解对不对。
所以,在申请完内存后,要把这段内存都初始化为0

热点排行