标题:请赐教!!!
只看楼主
预备大佬
Rank: 1
等 级:新手上路
帖 子: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
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:450
专家分:425
注 册:2018-9-4
得分:3 
我感觉:gu子函数中定义的数组a在返回主调函数main时被释放掉了,main函数又调用foo子函数,子函数中又定义了一个数组b,可能是系统分配给这两个数组的地址一样,之前的数据被覆盖了。
2018-12-21 17:45
想飞的蛋
Rank: 1
等 级:新手上路
帖 子:5
专家分:1
注 册:2018-11-8
得分:1 
我感觉按照运行就是输出四啊,没什么毛病。
2018-12-21 19:15
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:620
专家分:3020
注 册:2011-4-22
得分:6 
二楼说的基本正确。a是子函数定义的,退出子函数时,a数组已经失效,但是指针pa没有失效,也没有释放。
当foo子函数,定义数组b的时候,因为数组a的空间已经空闲,系统把这个空间又分配给数组b了,b和a实际沿用了同一个地址。所以又改写成了456。最后打印的时候,pa指向的地址实际是456。但是,这时候如果打印a[0],程序是报错的,因为a已经无意义了。
编程时应避免出现这种情况,野指针。
2018-12-21 21:00



参与讨论请移步原网站贴子: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