Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从内存加载选定字体时,SFML 2.1 sf::Text.setString()会导致崩溃_C++_Codeblocks_Sfml - Fatal编程技术网

C++ 从内存加载选定字体时,SFML 2.1 sf::Text.setString()会导致崩溃

C++ 从内存加载选定字体时,SFML 2.1 sf::Text.setString()会导致崩溃,c++,codeblocks,sfml,C++,Codeblocks,Sfml,如果我在字体上使用“loadFromFile()”,它将正确加载,游戏将运行。 但是,如果我在这里使用此示例代码: sf::Font TempFont; //TempFont.loadFromMemory(&tempImageVec[0],lengthh); TempFont.loadFromFile("Arial.ttf"); WorldPointer->

如果我在字体上使用“loadFromFile()”,它将正确加载,游戏将运行。 但是,如果我在这里使用此示例代码:

                sf::Font TempFont;
                //TempFont.loadFromMemory(&tempImageVec[0],lengthh);
                TempFont.loadFromFile("Arial.ttf");
                WorldPointer->loadedFonts.push_back(TempFont);
                //WorldPointer->loadedFonts[WorldPointer->loadedFonts.size()-1].loadFromMemory(&tempImageVec[0],lengthh);
                WorldPointer->loadedFontNames.push_back("Arial");
它完全可以工作,字体可以绘制到游戏中,但是如果我这样做:

            std::streampos lengthh;
            std::ifstream file2("Arial.ttf", std::ios::in | std::ios::binary);
            if(file2){
                file2.seekg(0,std::ios::end);
                lengthh = file2.tellg();
                file2.seekg(0,std::ios::beg);
                vector<char> tempImageVec(lengthh);
                file2.read(&tempImageVec[0],lengthh);
                sf::Font TempFont;
                TempFont.loadFromMemory(&tempImageVec[0],lengthh);
                WorldPointer->loadedFonts.push_back(TempFont);
                WorldPointer->loadedFontNames.push_back("Arial");
            }

可能是因为对象只存储指向数据的指针,而不进行深度复制吗?我想我刚读到流需要保持活动,这有点糟糕,我会尝试让流保持活动,我会回复你的哈哈:P@JoachimPileborg我想这是你说的是吗?不是流,但是从
tempImageVec
获取的指针必须在字体对象的生存期内有效。现在,当您离开
if
主体时,
tempImageVec
对象将被破坏,font对象中的指针将不再有效。是的,我保持了保存所有内存的向量处于活动状态,它现在似乎正在工作!但我从没想过会是这样,因为sf::Texture加载后不需要内存。。谢谢你们的快速帮助。
#0 0048DD0C tt_cmap4_char_map_binary () (??:??)
#1 004938E6 tt_cmap4_char_index () (??:??)
#2 0043C1A1 FT_Load_Char () (??:??)
#3 004128C2 sf::Font::loadGlyph(this=0x7069208, codePoint=32, characterSize=25, bold=false) (D:\developpement\sfml\sfml\src\SFML\Graphics\Font.cpp:388)
#4 0041233E sf::Font::getGlyph(this=0x7069208, codePoint=32, characterSize=25, bold=false) (D:\developpement\sfml\sfml\src\SFML\Graphics\Font.cpp:259)
#5 004146CC sf::Text::updateGeometry(this=0x28fdc4) (D:\developpement\sfml\sfml\src\SFML\Graphics\Text.cpp:248)
#6 00413F50 sf::Text::setString(this=0x28fdc4, string=...) (D:\developpement\sfml\sfml\src\SFML\Graphics\Text.cpp:68)
#7 00405656 world::world(this=0x28f2e8, MRP=0x28f100) (C:\Users\Heath\Desktop\Game Programming\Current Projects\Left4Zombie C++\world.cpp:11)
#8 004038A3 main() (C:\Users\Heath\Desktop\Game Programming\Current Projects\Left4Zombie C++\main.cpp:12)
(LoadGlyph is highlighted red)