搜索
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 请赐教!!!
标题:
请赐教!!!
只看楼主
预备大佬
等 级:
新手上路
帖 子:33
专家分:4
注 册:2018-11-8
结帖率:
81.82%
楼主
已结贴
√
问题点数:10 回复次数:3
请赐教!!!
#include<stdio.h>
int *gu()
{
int a[3] = {1,2,3};
int *pa = a;
return pa;
}
int *foo()
{
int b[3] = {4,5,6};
int *pb = b;
return pb;
}
int main()
{
int *pa = gu();
foo();
printf("pa[0] = %d\n",pa[0]);
return 0;
}
为什么传回来的值是4
搜索更多相关主题的帖子:
int
return
pb
main
printf
2018-12-21 17:16
lxk1732942
等 级:
侠之大者
威 望:
7
帖 子:450
专家分:425
注 册:2018-9-4
第
2
楼
得分:3
我感觉:gu子函数中定义的数组a在返回主调函数main时被释放掉了,main函数又调用foo子函数,子函数中又定义了一个数组b,可能是系统分配给这两个数组的地址一样,之前的数据被覆盖了。
2018-12-21 17:45
想飞的蛋
等 级:
新手上路
帖 子:5
专家分:1
注 册:2018-11-8
第
3
楼
得分:1
我感觉按照运行就是输出四啊,没什么毛病。
2018-12-21 19:15
zbjzbj
来 自:郑州
等 级:
贵宾
威 望:
52
帖 子:620
专家分:3020
注 册:2011-4-22
第
4
楼
得分:6
二楼说的基本正确。a是子函数定义的,退出子函数时,a数组已经失效,但是指针pa没有失效,也没有释放。
当foo子函数,定义数组b的时候,因为数组a的空间已经空闲,系统把这个空间又分配给数组b了,b和a实际沿用了同一个地址。所以又改写成了456。最后打印的时候,pa指向的地址实际是456。但是,这时候如果打印a[0],程序是报错的,因为a已经无意义了。
编程时应避免出现这种情况,野指针。
2018-12-21 21:00
4
1/1页
1
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-492193-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.012812 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved