【发布时间】:2012-05-30 15:36:42
【问题描述】:
有时我在调试模式下运行我的 Qt 项目时遇到“调试断言失败”错误 (image)。 我不知道我错在哪里,因为编译器什么也没说,我不知道该怎么做才能找到我的错误。
我在 Windows Vista 下编程,使用 Qt Creator 2.4.1、Qt 4.8.1。
我的程序必须从激光设备中读取一些信息并将它们保存到一个文件中,其代码类似于:
void runFunction()
{
configure_Scanning(...);
while(...)
{
// do something
scanFunction();
// do something
}
}
这是我的“有罪”功能(我认为问题出在哪里)
void scanFunction()
{
file.open();
data = getDataFromDevice();
if(flag)
{
if(QString::compare(lineB,"")!=0)
{
QTextStream out(&file);
out << lineB << endl;
lineB = "";
}
lineA.append(data+"\t");
}
else
{
if(QString::compare(lineA,"")!=0)
{
QTextStream out(&file);
out << lineA << endl;
lineA = "";
}
lineB.prepend(data+"\t");
}
file.close();
}
lineA 和 lineB 最初是两个 void QString:我的想法是我进行双向扫描以将信息保存在 2D 矩阵中(从 -X 到 +X反之亦然,而 Y 到达指定目标)。 lineA 记住 (-) 到 (+) 的读数; lineB 记住 (+) 到 (-) 的读数。当扫描方向改变时,我将lineA(或lineB)写入文件并继续扫描。
你明白我说的吗? 你能建议我一个解决方案吗?
感谢和抱歉我的英语:P
【问题讨论】:
-
点击对话框中的重试来调试程序,就像它说的那样。然后检查调用堆栈或将其添加到此问题中,您应该更好地了解出了什么问题。在旁注中,可能不需要不断打开和关闭文件,这会导致一些开销。
-
我知道在每一步打开和关闭文件并不是最好的策略,但我必须这样做以防止在意外中断的情况下丢失任何数据。
-
这不是
flush()所做的吗? -
如果我将代码
file.open()和file.close()插入到第二个if中,在QTextStream之前,我只有在确定有内容要写入时才打开文件。我我错了吗?这是防止堆损坏的可能策略吗? -
嗯...是的,它可能是(我没想到
flush())。但我认为我的问题仍然存在......
标签: c++ qt debugging assertion