gpt4 book ai didi

C++ 指针/对象错误

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

我有这段代码,我在其中创建了一个 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/

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