C++ 指针/对象错误

标签 c++ pointers object scope sfml

我有这段代码,我在其中创建了一个 SFML-Text 对象。但是当我尝试将它放入一个函数中时,我得到了一个错误。我有 Java 编程背景,这个指针让我很困惑。

这是由于不正确使用指针/引用引起的问题,还是因为对象无法在范围内存活?或者,是其他原因吗?

void createDisplayText(sf::Text *text, string content, sf::Font font)
{
    text->setFont(font);
    text->setCharacterSize(24);
    text->setString("Money: 0");
}

//Main function
sf::Text energyText;
createDisplayText(&energyText, "Energy: ", font);
energyText.move(0, 30);


//Main loop
    window.draw(energyText);

我收到这个错误:

Unhandled exception at 0x0F58FE8C (sfml-graphics-d-2.dll) in SFML_testing.exe: 0xC0000005: Access violation reading location 0x0000000C.

最佳答案

createDisplayText的第三个参数,即。 font,是(或“一个”)问题。如果您用那里的某种字体调用 createDisplayText,它会被复制,拷贝在函数内使用,并在函数结束时再次删除。

但在函数中,您调用了text->setFont,它接受了一个reference:它不会再次复制参数,而是直接使用您的第一个拷贝。如前所述,第一个拷贝很快就会被删除。虽然这对 text->setFont 没有问题(因为如果 createDisplayText 结束,它也已结束),它会将字体存储在 Text 类中的某个位置以供以后使用。然后……

(也请参阅 setFont 的文档:“字体参数指的是字体
只要文本使用它就必须存在。")

许多解决方案中的一个:也为每个引用传递 createDisplayText 的字体(sf::Font &font 而不是 sf::Font font ) 并注意 main 中的字体(等)将一直存在,直到不再需要它为止(如果不知道 main 函数,很难说如何)。

PS:在 Java 中,一切都像指针一样。非指针的东西应该是真正令人困惑的部分......

关于C++ 指针/对象错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29709684/

相关文章:

.net - 在 .NET 语言中使用 C++ header

c++ - 检查是否启动关机

c - 创建指向 char 指针的笛卡尔积的困难

c - 如何将 char* 传递给函数?

java - 每次我实例化新对象时,属性都会回到零

c++ - 为什么在同一声明区域内的同名声明被拒绝?

C++:int *j 有什么问题; *j=50; ?

javascript - 对象(字符串或数组)名称。如何得到它?

javascript - 为什么 null 是一个对象,null 和 undefined 有什么区别?

c++ - 无法在 Xcode 4 中进行调试