C++ 使用new/malloc是否绕过了本地指针的警告?

C++ 使用new/malloc是否绕过了本地指针的警告?,c++,pointers,warnings,compiler-warnings,C++,Pointers,Warnings,Compiler Warnings,我有以下代码: int* CoverFunction(){ int* result =new int[3]; result[0]=1; result[1]=2; result[2]=3; return result; } 这给了我以下警告: 警告:返回的局部变量“result”的地址[-Wreturn local addr] 但是,使用新的关键字不意味着这不应该是一个问题吗?这个函数结束后,我的数据是否有被擦除的风险,或者它是否会安全地保存在堆栈上?如

我有以下代码:

int* CoverFunction(){
    int* result =new int[3];
    result[0]=1;
    result[1]=2;
    result[2]=3;
    return result; 
}
这给了我以下警告:

警告:返回的局部变量“result”的地址[-Wreturn local addr]


但是,使用新的关键字不意味着这不应该是一个问题吗?这个函数结束后,我的数据是否有被擦除的风险,或者它是否会安全地保存在堆栈上?如果它安全地存在于堆栈上,如何消除警告?

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

所以,在这种情况下,并没有变量超出范围的危险,但问题仍然是谁会删除那个内存


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

该代码不应产生该警告。这是你的实际代码还是你从内存中输入的?这是实际代码。但是它确实产生了这个警告(注意,我使用的是一个奇怪的catkin_make版本,而不是一个普通的编译器)。这修复了错误(我不知道为什么编译器会抱怨),但是调用方有责任在使用后删除数组。省去调试内存泄漏的痛苦,只需使用
std::vector
。或者可能是
std::array
。如果您返回局部变量地址,则无法保证此内存不会被覆盖,而是本地变量的较新返回地址。仅返回堆中的内存地址,即函数
malloc()