C++ 悬空指针问题

C++ Dangling pointer issue

我正在为一个项目使用 Raylib GUI 框架,该项目显示 Collat​​z 猜想迭代中的所有节点。在我的程序中,我有一个 class 用于 Node 对象,它只是一个带有标记数字的圆圈。但是,我的 draw 方法中的变量 text 有问题; C26815: The pointer is dangling because it points at a temporary instance which was destroyed。我是 C++ 的新手,目前无法访问任何书籍来教我,因此我不完全确定“悬挂”指针是什么或它意味着什么,但我相当确定这是原因我无法在我的节点上显示任何文本。这是我的 Node class:

class Node {
private:
    int x;
    int y;
    int value;
    int radius;
public:
    Vector2 get_pos() {
        return Vector2{ (float)x, (float)-value * 25 };
    }

    void set_radius(int newRadius) {
        radius = newRadius;
    }
    
    void set_value(int newValue) {
        value = newValue;
    }

    void set_x(int newX) {
        x = newX;
    }

    void set_y(int newY) {
        y = newY;
    }

    void draw() {
        
        if (value) {
            const char* text = std::to_string(value).c_str();
            Vector2 size = MeasureTextEx(GetFontDefault(), text, 32.0f, 0.0f);
            Vector2 pos = get_pos();
            DrawCircle(pos.x, pos.y, radius, WHITE);
            DrawText(text, pos.x - size.x / 2, pos.y - size.y / 2, 32, BLACK);
        }
    }
};

任何有关正在发生的事情的帮助或解释将不胜感激。

编辑:其他人在其他问题上也有类似的问题,但 none 的答案对我来说有意义或适合我的情况。

在这一行

const char* text = std::to_string(value).c_str();

您正在调用 c_str(),其中 returns 指向 std::to_string(value) 返回的临时缓冲区的指针。此临时生命周期在此行的末尾结束。从 c_str 返回的指针仅在字符串仍然存在时才有效。

如果DrawText复制字符串(而不是仅仅复制你传递的指针),你可以通过

修复它
        std::string text = std::to_string(value);
        Vector2 size = MeasureTextEx(GetFontDefault(), text, 32.0f, 0.0f);
        Vector2 pos = get_pos();
        DrawCircle(pos.x, pos.y, radius, WHITE);
        DrawText(text.c_str(), pos.x - size.x / 2, pos.y - size.y / 2, 32, BLACK);