c++ - 重温 C++ 指针和函数

标签 c++ function pointers

<分区>

我有一个 C++ 代码。

int* func(int n) {
    int* v= &n;
    return v;
}
int main()
{
    int* c = func(5);
    int* k = func(9);
    cout<<*c;
}

此代码返回 9 而不是 5。 但是,当我将 func 更改为

int* func(int n) {
    int* v= new int(n);
    return v;
}

这会按预期返回 5。第一个不起作用但第二个起作用的原因是什么?

最佳答案

func 返回指向参数 n 的指针。请注意,n 被声明为按值传递,它会在函数结束时被销毁。然后返回的指针总是悬空的,对它的取消引用导致 UB .

第二个代码片段没有这样的问题。 func 返回一个指针new在函数体中,即使在函数结束后它仍然有效。 (顺便说一句,返回的指针必须在某处删除以避免内存泄漏。)

关于c++ - 重温 C++ 指针和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67658135/

相关文章:

c++ - 返回临时的 const 引用

c++ - 创建指向返回 std::pair 的函数的成员函数指针

c - 如何在 C 中保留函数指针?

ios - 如何在 swift 3 中按下按钮时转到另一个 View Controller

java - 尝试解析数组时出现空指针异常(java)

c++ - Xcode 和 wxWidgets 框架

c++ - 是否可以从 uint32 读取 s64 值?

javascript - object 使用追加的对象问题

c - 我应该使用什么 : strcpy or pointers?

C对数组的厌恶