C语言,a=malloc,b=a,c=a,free(b),free(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;
}

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

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

你这是想实现什么功能?

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

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

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

#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;
}
程序运行完全没有问题。你自己写错了。

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