不知道什么问题.出错.

leboc 2008-10-06 09:05:28
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{
char a='a';
char *p;
p=(char *)malloc(sizeof(char));
if(p==NULL)
{
printf("aaaaaa");
getch();
exit(0);
}
p=&a;
printf("%c",*p);
free(p);
}
...全文
45 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
infosafety 2008-10-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qqwx_1986 的回复:]
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{
char a='a';
char *p;
p=(char *)malloc(sizeof(char));
if(p==NULL)
{
printf("aaaaaa");
getch();
exit(0);
}
char *b=p;//保存原来指针
p=&a;
printf("%c",*p);
free(b); //释放原来指针内存
}
出错是因为你的p已经指向了a的地址
而a并不是动态申请的
不能用free释放


}
[/Quote]
对的.....
chlaws 2008-10-06
  • 打赏
  • 举报
回复
[code=C/C++]
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{
char a='a';
char *p;
p=(char *)malloc(sizeof(char));
if(p==NULL)
{
printf("aaaaaa");
getch();
exit(0);
}
*p=a; //既然你已经给p申请了空间那么 就可以直接把值放入它申请的空间内,而非让它重新指向a,
//那样在free时,由于是非p申请的内存区,强制对其释放(即对a释放它所占的内存区) 将会内存报错
printf("%c",*p);
free(p);
}


[/code]
arong1234 2008-10-06
  • 打赏
  • 举报
回复
当你赋值p=&a时,它已经不再指向malloc所分配的内存了,你已经没有办法去释放那块内存了
而你free的实际的是&a,由于&a不是你通过malloc分配的,因此你无权去释放它的
qqwx_1986 2008-10-06
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{
char a='a';
char *p;
p=(char *)malloc(sizeof(char));
if(p==NULL)
{
printf("aaaaaa");
getch();
exit(0);
}
char *b=p;//保存原来指针
p=&a;
printf("%c",*p);
free(b); //释放原来指针内存
}
出错是因为你的p已经指向了a的地址
而a并不是动态申请的
不能用free释放


}
Arthur_ 2008-10-06
  • 打赏
  • 举报
回复
void main() 
{
char a='a';
char *p;
p=(char *)malloc(sizeof(char)); //没有必要分配内存
if(p==NULL)
{
printf("aaaaaa");
getch();
exit(0);
}
p=&a; //因为这里p指向了a, a已经有空间了,所以不用分配。
printf("%c",*p);
free(p); //因为p = &a将p的值改变了, 而此时free的地址是a的地址而不是前面malloc的地址,会抱错的
}

69,373

社区成员

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

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