【发布时间】:2014-11-14 10:26:02
【问题描述】:
我有以下代码:
int* CoverFunction(){
int* result =new int[3];
result[0]=1;
result[1]=2;
result[2]=3;
return result;
}
这给了我以下警告:
警告:返回的局部变量“result”的地址 [-Wreturn-local-addr]
但是使用 new 关键字不是意味着这不应该是一个问题吗?在这个函数结束后我的数据是否有被删除的风险,或者它会安全地存在于堆栈中吗?如果它安全地存在于堆栈中,我该如何摆脱警告?
【问题讨论】:
-
该代码不应产生警告。这是您的实际代码还是您从记忆中输入的代码?
-
这是实际代码。然而它确实产生了这个警告(注意我使用了一个奇怪的 catkin_make 版本而不是一个普通的编译器)。
-
这修复了错误(我不知道你的编译器为什么会抱怨),但是调用者有责任在使用后删除数组。省去调试内存泄漏的痛苦,只需使用
std::vector。或者可能是std::array. -
如果你返回局部变量地址,那么你不能保证这块内存不会被覆盖,更新的局部变量返回地址。只返回堆中的内存地址,即函数
malloc()自带的内存地址
标签: c++ pointers warnings compiler-warnings