我最近遇到了一个问题,我想不出一个好的解决方法.我正在使用案例结构来尝试将属性设置为将传递给对象构造函数的"字符".
例:
//note this is inside a function with a return type of int*
int selection;
cin >> selection;
int * iPtr;
switch(selection){
case 1:{
     int anArray[6] = {8,5,2,4,250,100} // str, dex, int, luck, hp, mp
     iPtr = anArray;
     return iPtr;
}
//more cases and such below
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,当我返回指针时,它似乎充满了大量的垃圾,而不是信息,而不是我期望它保留的信息.那是因为数组在范围的末尾被销毁了吗?如果是这样,我该怎么做才能使我的方法成为我希望它(获得一个指向我想要的值的指针).
谢谢!
是 - anArray在堆栈中声明.当函数退出时,它的堆栈帧被回收,因此引用该内存不再有效.如果您希望数组保持不变,请将其分配到堆上:
int* anArray = new int[6]; // and initialize
return anArray;
Run Code Online (Sandbox Code Playgroud)
只要记得稍后用相应的方法清理它delete[].
编辑
您应该更喜欢使用能够自动管理资源的东西,例如Praetorian的答案,这样您就不会意外泄漏内存.