函数返回值基础有关问题请问
函数返回值基础问题请教
函数返回时是将返回值拷贝到某个寄存器中,实际上返回的是拷贝的值而不是原来的值。不知道我这样理解正确吗?
那么如下的函数有什么问题呢?
int fun()
{
int *p=new int(5);
return *p;
}
int main()
{
int a=fun();
return 0;
}
我的理解是将*p的值(也就是5)拷贝到寄存器中,然后将5返回;可是在程序运行时有错,除了内存泄露外还有哪些错误呢?感觉我对程序返回的原理不甚明了。望大家指教!!
------解决方案--------------------
嗯 这个很简单, 就是你new了一个东西 没有delete
而且你在一个函数内new出来, 函数外使用, 有没有全局变量或者别的什么东西保存变量的地址, 是有很大的问题的
改成这样,稍微好些:
int* fun()
{
int *p=new int(5);
return p;
}
int main()
{
int* a=fun();
printf( "%d ", *a);
delete a;
return 0;
}
函数返回时是将返回值拷贝到某个寄存器中,实际上返回的是拷贝的值而不是原来的值。不知道我这样理解正确吗?
那么如下的函数有什么问题呢?
int fun()
{
int *p=new int(5);
return *p;
}
int main()
{
int a=fun();
return 0;
}
我的理解是将*p的值(也就是5)拷贝到寄存器中,然后将5返回;可是在程序运行时有错,除了内存泄露外还有哪些错误呢?感觉我对程序返回的原理不甚明了。望大家指教!!
------解决方案--------------------
嗯 这个很简单, 就是你new了一个东西 没有delete
而且你在一个函数内new出来, 函数外使用, 有没有全局变量或者别的什么东西保存变量的地址, 是有很大的问题的
改成这样,稍微好些:
int* fun()
{
int *p=new int(5);
return p;
}
int main()
{
int* a=fun();
printf( "%d ", *a);
delete a;
return 0;
}