【C++函数调用小问题】
不是说调用函数之后,,函数之内除返回值的东西会消失吗?
那么调用生成列表的函数之后,只返回了头地址的值,,列表怎么还存在?
我菜鸟一个,,谢谢解答;
struct Jonse
{
int code;
Jonse *next;
}
Jonse * Creat( int n )
{
,,,,,,
}
[解决办法]
这个问题描述起来比较麻烦,主要是变量的存储位置不一样,会导致表现出来的结果也不一样。
一般来说 变量可以存储在 栈 上,也可以存储在 堆 上。
存储在栈上的变量会受到作用域的影响,当超出了该变量的作用域(静态变量除外),该变量就会被弹出堆栈,它所占用的内存也会被释放掉。
存储在 堆 上的变量会一直存在于内存之中,除非你显式地去释放它。
如果你需要把某个变量/对象存储在堆上,那么你就需要用 malloc 函数 或者 new 操作符,否则该变量就应该是存放在 栈 上。
举例如下
我有两个函数,这两个函数都是返回一个std::string类型的指针,但其中一个函数在调用时,会产生断错误。原因是它返回了一个堆栈上的地址,这个地址在该函数被调用之后便不复存在了!
#include <iostream>//危险:获取栈上指针std::string* getStackPointer(){ std::string str(std::string("hello getStackInteger")); return &str;}//合法:获取堆上的指针std::string* getHeapPointer(){ std::string* pstr = new std::string("hello getHeapPointer"); return pstr;}int main(){ std::string* pStr = getHeapPointer(); std::cout << "The value of string is: \n"<<*pStr<< std::endl; delete [] pStr; //注意:此处会出现断错误 pStr = getStackPointer(); std::cout << "The value of string is: \n"<<*pStr<< std::endl; return 0;}