2 lylegend13 lylegend13 于 2013.08.11 08:21 提问

C语言,a=malloc,b=a,c=a,free(b),free(c)出错
c++ c

#include

int _tmain(int argc, _TCHAR* argv[])
{
char a=(char)malloc(4);
memcpy(a,"123",3);

char *b=a;
char *c=a;

if(b)
{
free(b);
}

if(c)
{
free(c);
}

return 0;
}

6个回答

WY247688206
WY247688206   2013.10.18 07:13
已采纳

**f(b)
{
free(b);
}

if(c)
{
free(c);
}
因为b 和 c 都初始化存储的a 开辟空间的地址,所以都不为空,程序运行中,执行 释放b,c所指地址已经成为野指针,释放空的内存空间,当然是会出现问题的。

zhengfuzhe1124
zhengfuzhe1124   2013.08.11 21:59

你这是想实现什么功能?

u011652814
u011652814   2013.08.14 20:54

free(b)的时候已经把内存释放了,再执行free(c)又来释放这片内存是非法的

jlnu_pan
jlnu_pan   2013.09.02 13:01

char *a = (char *)malloc(4);

注释掉free(b)或free(c);同时要置空

lhl1158612009
lhl1158612009   2013.09.02 16:44

#include
#include
#include

int main(int argc, char* argv[])
{
char a = (char)malloc(4);
memcpy(a,"123",3);
char *b = a;
char *c = a;
if (b)
{
free(b);
}
printf("OK1\n");
if (c)
{
free(c);
}
printf("OK2\n");
return 0;
}
程序运行完全没有问题。你自己写错了。

John_ToString
John_ToString   2015.12.24 15:49

程序出错肯定是在你试图释放c指向的位置的时候,这时候b已经将此处释放了,c的指向就不确定能不能用了,编译器给你蹦都算好的了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!