【发布时间】:2020-08-07 12:49:41
【问题描述】:
我在 QtCreator 中从事 C++ Qt 项目。对数据进行了一些操作(例如 std::double 类型)。当我在没有任何断点的情况下开始调试时,我的应用程序会显示正确的数据 (-8.7357)。但是当我运行已经编译的程序时,我得到了(-8)。这种情况可能是什么原因?
下面是我的一段json文件:
{
...
"sources": [
[-8.30000, -1.43300, 0],
[-8.73575, -1.76287, -0.24404],
[-8.68767, -1.72513, 0.35267],
[-8.24991, -1.39526, 0.59671],
[-7.86225, -1.10313, 0.24404],
[-7.91233, -1.14087, -0.35267],
[-8.35009, -1.47074, -0.59671]
]
...
}
解析该文件:
Json::Value root;
std::ifstream jsonFile(pathToJsonFile);
jsonFile >> root;
...
Json::Value srsc = root["sources"];
for (Json::Value::ArrayIndex i = 0; i != srsc.size(); i++)
{
Json::Value src = Json::arrayValue;
src = srsc[i];
Antenna::centerPoint cp;
cp.x = src.get(Json::ArrayIndex(0), Json::Value()).asDouble();
cp.y = src.get(Json::ArrayIndex(1), Json::Value()).asDouble();
cp.z = src.get(Json::ArrayIndex(2), Json::Value()).asDouble();
an.sources[i] = cp;
}
为模型设置数据,然后在屏幕上显示:
for(unsigned int row = 0; row < an.sources.size(); row++)
{
model->setData(model->index(row, 0), an.sources[row].x);
model->setData(model->index(row, 1), an.sources[row].y);
model->setData(model->index(row, 2), an.sources[row].z);
}
...
ui->sourcesTableView->setModel(model);
我正在使用:
我在 Linux astra 4.15.3-2-generic OS
GCC 编译器 - gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516.
cmake 版本 3.7.2
gdb 调试器 - GNU gdb (Debian 7.12-6) 7.12.0.20161007-git
【问题讨论】:
-
由于我们不是魔术师,您能否展示您如何使用您所指的这些数据,并告诉我们为什么一个值应该正确而另一个值应该错误
-
@RoQuOTriX 没什么特别的。我解析了一些 json 文件,然后在 QTextEditor 内的屏幕上打印值。我不澄清细节的主要原因是在这两种情况下我都做的完全一样。当我进行调试时,它会以正确的方式进行,但是当仅运行编译的应用程序时,它会将我向下舍入 double 值。我认为这是编译或优化问题。
-
一个典型的原因是你有一个统一变量,在调试模式下恰好为零,而在运行模式下有一个随机值,所以你得到不同的结果。
-
@ZabolonkovDmitri 我认为这是编译或优化问题。 -- 程序员应该做的第一件事是不要责怪正在使用的工具。始终要考虑的第一件事是它是否是代码中的错误。