字符串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