【发布时间】:2012-10-14 08:45:58
【问题描述】:
我有一个奇怪的问题。当我通过 Qt 文件对话框打开文件时,我的工具运行正常。 但是,当我在 VS 2010 中将其他库中的 dll 绑定到我的项目中时,当我打开文件时该工具会崩溃。通过调试我发现它发生在基本字符串的析构函数中。 以下行导致问题:
std::string inputFilename = aFilenames.at(i).toStdString();
其中aFilenames 是一个QStringList。如果我写:
std::string inputFilename = "C:\\test.txt";
然后就可以了。那么 std::string 出了什么问题,为什么当我将另一个库中的 dll 绑定到我的项目中时会发生这种情况?
【问题讨论】:
-
您确定您在位置
i的特定字符串存在吗?你没有在向量/数组之外的地方阅读? -
我无法重现该问题,您需要提供更多信息。
-
是的,我确信我没有越界。我可以在调试器中看到它。无论如何,如果我不绑定 dll,它可以工作......当我绑定 dll(第三方库)时,问题就出现了。但是我的第一个陈述和第二个陈述有什么区别?它们都是 std::strings...
-
另一个建议,将字符串转换为 C 字符串(以 \0 结尾的字符数组),然后将 C 字符串转换为 std::string(假设您的文件名没有任何非 ASCII 字符) .
-
@ISTB 很难在没有看到中间值(调试输出,我的意思是)的情况下问问题是什么。这可能是与当前默认编码相关的一些深奥的字符编码问题,无论是在 Qt 还是在 STL 端。