首页 新闻 会员 周边 捐助

c指针问题 如图 为什么会有这种情况 求大侠指点

0
悬赏园豆:20 [已解决问题] 解决于 2012-12-14 01:03

不给指针p赋值为什么 还是取到了一个负值

而且每次运行 printf("%d\n",p);的值都不同

用free函数释放空间以后 还是取到了一个负值

同上每次运行 printf("%d\n",p);的值都不同

 

keiling的主页 keiling | 初学一级 | 园豆:15
提问于:2012-12-13 11:33
< >
分享
最佳答案
0

因为p是指针,指针保存的内容是地址,所以print("%d",*p)会输出一个负值;你虽然free(p),释放了动态申请的内存,但并没有使 p=0 | p = NULL, 所以p变为野指针,指向未知的内存中,所以输出的值和以前的不一样。

收获园豆:10
wzheng | 初学一级 |园豆:197 | 2012-12-13 15:05

自己解决了 哈哈 不过还是谢谢你 ty

keiling | 园豆:15 (初学一级) | 2012-12-14 01:05
其他回答(3)
0

这就是指针的强大之处以及让新手困惑的地方,要理解这个问题,请结合操作系统原理。

收获园豆:10
Launcher | 园豆:45050 (高人七级) | 2012-12-13 11:42

哈哈 谢谢你的意见  请问-572662307 这难道表示着什么吗 

支持(0) 反对(0) keiling | 园豆:15 (初学一级) | 2012-12-13 11:49

@keiling: 表示你 malloc 的 4字节(x86)内存中存储的值。

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2012-12-13 11:50

狗屁不通!

支持(0) 反对(1) garbageMan | 园豆:313 (菜鸟二级) | 2012-12-13 13:51
0

在C语言中,指针类型的输出的转换格式是%p而不是%d。

用%d格式转换并输出指针是错误的,因为C语言从没有保证这样写会输出什么。

garbageMan | 园豆:313 (菜鸟二级) | 2012-12-13 13:53
0

内存地址 是十六进制的 这谁都知道 没什么好说的   garbageMan 根本没回答问题

free(p);释放了动态申请的内存 但并没有使 p=0 | p = NULL, 所以p变为野指针(这样写本来就是不好的编程习惯),强制要其输出值时只能得到一个垃圾数字;

malloc出来的内存是随机的 故返回的内存首地址也是随机(动态开辟内存空间)的 所以每次运行 printf("%d\n",p)的值都会变;

每次运行 printf("%d\n",&p)的值不会变,因为这里输出的是 指针变量P 自身的内存地址 而不是其存放的地址;

keiling | 园豆:15 (初学一级) | 2012-12-14 01:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册