为什么这样施放指针有错呢?不解

raygts 2006-06-25 11:30:16
int main
{

char *test1=NULL;
char out[]="Hello\0";
test1 = (char *)malloc(256);

test1 = out;
printf("Test len:%ld \n",strlen(test1));

free(test1); //报错!!!!
return 0;
}

gcc 3.4.3编译器编译
...全文
137 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tailzhou 2006-06-25
  • 打赏
  • 举报
回复
test1 = (char *)malloc(256); test1指向堆

test1 = out; test1指向栈

栈是系统自动释放的,只能释放指向堆的指针
crazy_lazy_pig 2006-06-25
  • 打赏
  • 举报
回复
呵呵, 如果要用指针指向out的话, 那就不用释放了呀, 如果一定要释放还一定要指向out, 那么就这样:
test1 = (char *)malloc(256);
free(test1); //呵呵, 好玩.
test1 = out;

Alaylm 2006-06-25
  • 打赏
  • 举报
回复
test1 = out; 改成strcpy(test1,out);楼主是这意思不?
triace_zhang 2006-06-25
  • 打赏
  • 举报
回复
栈里的变量不用手动释放,变量的生存期完了之后编译器会执行弹栈动作,自动释放变量的内存段。
Alaylm 2006-06-25
  • 打赏
  • 举报
回复
strcpy();
raygts 2006-06-25
  • 打赏
  • 举报
回复
那怎么样释放这个指针啊???我想用指针哦
xyq1986 2006-06-25
  • 打赏
  • 举报
回复
二楼的说得没错,要用free就不要再用out对test1贼值了
crazy_lazy_pig 2006-06-25
  • 打赏
  • 举报
回复
同意楼上的.

另外, 在test1=out时发生了内存泄漏, 先前alloc出来的空间"丢失"了.

69,382

社区成员

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

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