C++ 悬空指针问题
C++ Dangling pointer issue
我正在为一个项目使用 Raylib GUI 框架,该项目显示 Collatz 猜想迭代中的所有节点。在我的程序中,我有一个 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);
我正在为一个项目使用 Raylib GUI 框架,该项目显示 Collatz 猜想迭代中的所有节点。在我的程序中,我有一个 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);