高手帮忙改错
#include "stdio.h "
#include "conio.h "
int add(int a, int b)
{
int *p;
*p = a+b;
return *p;
// int p;
// p = a+b;
// return p;
}
void main()
{
int sum=add(3,5);
printf( "sum=%d \n ",sum);
getch();
}
这个程序应该有错误,个人理解指针P是个局部变量,生存周期仅在函数add()中,当函数运行完,指针变为野指针。但是编译器却运行正确,为什么?
另外修改函数add()
int add(int a, int b)
{
int p;
p = a+b;
return p;
}
变为如上之后,我记得是正确的,但是按照理解p是局部变量,那也应该是错的,这又为什么?
[解决办法]
p又没有在main()函数中出现阿,和局部不局部有什么关系
[解决办法]
#include "stdio.h "
#include "conio.h "
int add(int a, int b)
{
int *p = new int(0);
*p = a+b;
return *p;
delete p;
p = NULL;
// int p;
// p = a+b;
// return p;
}
void main()
{
int sum=add(3,5);
printf( "sum=%d \n ",sum);
getch();
}
[解决办法]
你搞错了
你没有为p指定一个变量,也就是它没有容器.
#include "stdio.h "
#include "conio.h "
int add(int a, int b)
{
int *p;
int q;
p=&q;
*p = a+b;
return *p;
// int p;
// p = a+b;
// return p;
}
void main()
{
int sum=add(3,5);
printf( "sum=%d \n ",sum);
getch();
}
试试上面的
就可以了
如果没有为p指定,那它的指向是未知的,那是很危险的.
int add(int a, int b)
{
int p;
p = a+b;
return p;
}
本身没错啊 add返回一个int变量p,然后再结束add函数,p才会释放.