这是一个游戏对话部分出现的bug(编译器Visual Stuidio 2019).用tinyxml读取utf-8编码的剧本, 以用TTF创建的Label显示, 每0.1秒更新字幕实现打字效果, 可以翻页。显示到某个特定的位置就会报如下错误, 具体由字体、文本内容、自然语言和代码决定

字体:
换个中文字体可能会改变引发bug的文本位置, 但不会消除bug
如果用arial, 虽然显示出来都是方块, 但是完全不会报错
文本内容:
如果移动或删除出bug的那一页的内容, 前者会移动、后者会延后bug发生的位置
自然语言:
日语和英语文本都没问题啊, 为啥一用中文就崩溃嘞?
代码:
1.如果直接删除setstring让字幕不去显示, 则没有bug;
2.在某处魔改一下代码, 增加setstring调用次数, 比如把
caption->setString(node->getContentByLength(wordCount));
改成
caption->setString(node->getContentByLength(wordCount));
caption->setString(node->getContentByLength(wordCount));
caption->setString(node->getContentByLength(wordCount));
则有一定概率一次运行内全程不引发bug;
3.如果每次翻页的时候显示地换一个新的label, bug延后。如果用setstring没有此效果;
4.换成ui::Text没有影响;
5.将每次的setstring改成手动换一个新label没有影响;
下面的分别是更新字幕和翻页的完整代码(由于是打字机效果, 布尔值loaded指示当前页是否已经打完)

//翻页
void Dialog::turn_page() {
loaded = false; //重置加载状态
if (index < talkList.size() - 1) ++index; //翻到下一页
wordCount = 0; //重置文字计数
以上, 折腾好几天了
希望各位大佬帮帮小白

字体:
换个中文字体可能会改变引发bug的文本位置, 但不会消除bug
如果用arial, 虽然显示出来都是方块, 但是完全不会报错
文本内容:
如果移动或删除出bug的那一页的内容, 前者会移动、后者会延后bug发生的位置
自然语言:
日语和英语文本都没问题啊, 为啥一用中文就崩溃嘞?
代码:
1.如果直接删除setstring让字幕不去显示, 则没有bug;
2.在某处魔改一下代码, 增加setstring调用次数, 比如把
caption->setString(node->getContentByLength(wordCount));
改成
caption->setString(node->getContentByLength(wordCount));
caption->setString(node->getContentByLength(wordCount));
caption->setString(node->getContentByLength(wordCount));
则有一定概率一次运行内全程不引发bug;
3.如果每次翻页的时候显示地换一个新的label, bug延后。如果用setstring没有此效果;
4.换成ui::Text没有影响;
5.将每次的setstring改成手动换一个新label没有影响;
下面的分别是更新字幕和翻页的完整代码(由于是打字机效果, 布尔值loaded指示当前页是否已经打完)

//翻页
void Dialog::turn_page() {
loaded = false; //重置加载状态
if (index < talkList.size() - 1) ++index; //翻到下一页
wordCount = 0; //重置文字计数
以上, 折腾好几天了
