字符串free()问题,请教

Ronal_Lee 2007-04-16 01:41:18
#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)个字节空间。那么为什么会出现上面的错误呢!
...全文
373 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzyjsjcom 2007-04-16
  • 打赏
  • 举报
回复
加个结尾符
#include <stdio.h>
#include <string.h>
#include<malloc.h>
void main()
{
char str[100] = "kall";
char * tstr;
tstr=(char *)malloc(strlen(str)+1);
strcpy(tstr,str);
tstr[strlen(str)] = '\0';
printf("%s\n",tstr);
free(tstr); //free以\0结束释放
}
huiminlee 2007-04-16
  • 打赏
  • 举报
回复
我认为intuition444(直觉) 说出了问题所在
WinWing 2007-04-16
  • 打赏
  • 举报
回复
没问题吧,有问题也是出在这里
strcpy(tstr,str);
tstr的空间不够
intuition444 2007-04-16
  • 打赏
  • 举报
回复
你的程序主要问题是这个函数:
strcpy(tstr,str);
这个函数会一直copy,str这个字串,知道'\0'终止,所以如果"kall"后一个地址的值不是'\0'就会拷贝更多的字符到tstr指向的内存连续地址。这样在释放的时候,系统发现要释放的内存大小与申请的不同,就会出错了
不知道这种理解对不对。
所以,在申请完内存后,要把这段内存都初始化为0
intuition444 2007-04-16
  • 打赏
  • 举报
回复
上面的代码错了,用这个
#include <stdio.h>
#include <string.h>
#include<malloc.h>
void main()
{
char str[100] = "kall";
char * tstr;
tstr=(char *)malloc(strlen(str)+1);
memset(tstr, 0, strlen(str)+1);
strcpy(tstr,str);
printf("%s\n",tstr);
free(tstr); //free以\0结束释放
}
飞哥 2007-04-16
  • 打赏
  • 举报
回复
或者
strncpy(tstr,str,strlen(str));
飞哥 2007-04-16
  • 打赏
  • 举报
回复
tstr=(char *)malloc(strlen(str));

===>>>

tstr=(char *)malloc(sizeof(str));
intuition444 2007-04-16
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
#include<malloc.h>
void main()
{
char str[100] = "kall";
char * tstr;
tstr=(char *)malloc(strlen(str)+1);
strcat(tstr, '\0');
strcpy(tstr,str);
printf("%s\n",tstr);
free(tstr); //free以\0结束释放
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧