【问题标题】:Does using new/malloc get around the warning of local pointers?使用 new/malloc 会绕过本地指针的警告吗?
【发布时间】: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


【解决方案1】:

当您使用 new/malloc 时,内存是从堆中分配的。

因此,在这种情况下,变量没有超出范围的危险,但仍然存在谁会删除该内存的问题?

而且我相信即使您使用 malloc,您也无法摆脱该警告。

【讨论】:

    猜你喜欢
    • 2016-04-28
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 2012-09-07
    • 2011-05-24
    • 1970-01-01
    相关资源
    最近更新 更多