gpt4 book ai didi

c++ - 手动删除函数返回的指针

转载 作者:行者123 更新时间:2023-11-28 00:42:19 25 4
gpt4 key购买 nike

假设我有这段代码。

int* Func(std::vector<int> integers)
{
for (int i : integers)
{
if (something)
{
return &i;
}
}

return nullptr;
}

int* x = Func({3, 4, 5, 6, 7});
delete(x); ???

我应该删除“x”(如果它不是 nullptr)吗?据我所知,我们应该只释放由运算符“new”分配的内存。这当然不是这里的情况。

最佳答案

简短的回答:你是对的,你不应该delete,但这是你最不担心的事情......

您正在返回局部变量 (i) 的地址。那是恶业。

您可以尝试按如下方式解决此问题(注意两个额外的 &):

int * Func(std::vector<int> & integers) {
for (int & i : integers)
if (something)
return &i;
return nullptr;
}

但即便如此,您仍会遇到问题,因为您传入的 vector 是一个临时的 ({3, 4, …}),它会在您经过分号之前被销毁。事实上,我认为它甚至不会编译,因为我们现在正试图将一个临时值作为左值引用传递。

由于您使用的是 C++11,因此我认为您要完成的是:

std::vector<int> integers = {3, 4, 5, 6, 7};
auto x = std::find_if(begin(integers), end(integers), [](int i) { return something; });
if (x != end(integers)) {
// Use *x…
} else {
// Not found
}

关于c++ - 手动删除函数返回的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18171280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com