读书人

高手帮忙改错解决方案

发布时间: 2012-03-11 18:15:39 作者: rapoo

高手帮忙改错
#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才会释放.


读书人网 >C语言

热点推荐