C语言指针参数传递为什么我的程序崩溃?

#include<stdio.h>
void real(int *pi);
void main()
{
int a[2],d;
int *b;

real(b);
d=*b;

printf("%d",d);
system("pause");

}
void real (int *pi)
{
int a=100;
pi=&a;
}

错误原因,指针b没有赋予初值,b指向哪里了?他是一个野指针。

                 把它作为函数的实参传递给函数real是有问题。


温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-03
void real (int *pi)
{
int a=100;
pi=&a;
}
有两个问题:1,a是局部变量,函数结束后就消失了,不能再引用
2.编译器会为函数的每个参数制作临时副本,所以函数里面的pi并不是真正的pi

这个函数改一下:
int a = 100 ;//定义到函数外部
int *real(int *pi)
{
pi = &a;

return pi;//返回a的地址

}
d = *real(b);//此时d = 100;
或者
void real(int **pi)
{
*pi = &a;

}

于是
real(&b);
d = *b;//此时d = 100;本回答被网友采纳
第2个回答  2014-12-03

是想写成这样吧

追问

可以输出了,我想问一下 real函数执行完后 a不是被释放了吗? 为什么返回的还是100呢?

追答

地址交还给了,但可以非法访问该空间。

本回答被提问者采纳
第3个回答  2014-12-03
你这个a的生命周期只在real函数体中,函数结束,a就被释放了,pi指向的位置里有什么就不一定了、
第4个回答  2014-12-03
因为你在使用b之前没有给b赋值,b指向哪里了?他是一个野指针,有问题的。
相似回答