关于取函数返回值地址的有关问题
【求助】关于取函数返回值地址的问题
遇到一个问题,请大侠们指点
以一个代码为例:
对于基础类型,简单数据返回结果会返回在eax寄存器中,上面的代码会报错
但是如果返回的不是int而是一个对象的话,返回的效果应该是在栈上开一块空间传入到函数中,函数中把对象拷贝到对应空间处,返回返回值的指针在eax寄存器中。
但是如果我像下面这样的
会得到一个编译器告警,编译成功,但是这个样子这块栈空间什么时候释放呢?是不是说因为我有一个指针的指向而一直不释放呢?怎么样才能体现他确实释放了呢? 我在name = &getVal();后写了一堆的调用函数的代码,函数的入参都很大,可是不管怎么多调用,最后取出name的值仍然是完好的,很迷茫啊,求解释
------解决方案--------------------
内存在函数调用的表达式结束后就回收了.
回收并不代表内存就不可用了. 内存还在, 只是编译器随时可能把它用于其他用途.
如果你运气好, 编译刚好还没有把它用作其他的, 你就看不到错误.
------解决方案--------------------
正解,我给代码解释下
咱先把引用去掉,在c下编译是通不过的
遇到一个问题,请大侠们指点
以一个代码为例:
#include <iostream>
#include <string.h>
int getName()
{
int i = 20;
return i;
}
int main()
{
int *p;
p = &getName();
return 0;
}
对于基础类型,简单数据返回结果会返回在eax寄存器中,上面的代码会报错
但是如果返回的不是int而是一个对象的话,返回的效果应该是在栈上开一块空间传入到函数中,函数中把对象拷贝到对应空间处,返回返回值的指针在eax寄存器中。
但是如果我像下面这样的
ClassName getVal()
{
.....
}
int main()
{
ClassName *name;
name = &getVal();
...
return 0;
}
会得到一个编译器告警,编译成功,但是这个样子这块栈空间什么时候释放呢?是不是说因为我有一个指针的指向而一直不释放呢?怎么样才能体现他确实释放了呢? 我在name = &getVal();后写了一堆的调用函数的代码,函数的入参都很大,可是不管怎么多调用,最后取出name的值仍然是完好的,很迷茫啊,求解释
------解决方案--------------------
内存在函数调用的表达式结束后就回收了.
回收并不代表内存就不可用了. 内存还在, 只是编译器随时可能把它用于其他用途.
如果你运气好, 编译刚好还没有把它用作其他的, 你就看不到错误.
------解决方案--------------------
正解,我给代码解释下
咱先把引用去掉,在c下编译是通不过的
2 #include <stdio.h>
3 #include <string.h>
4 int getName()