我遇到了这个困境:使用下面的类似代码:
//floatArray[totalKeyPoints] declared just outside this loop
for(int d = 0; d < totalGroups; d++)
{
std::string STRING = "";
QString lk = "test" + QString::number(d) + ".txt";
std::string kl;
kl = lk.toStdString();
std::ifstream infile(kl.c_str());
//std::cout << "FILEPATH: " << kl.c_str() << std::endl;
int gl = 0;
while(endFile != true)
{
endFile = infile.eof();
getline(infile,STRING);
if(STRING.empty() == false && endFile == false && gl < totalKeyPoints)
{
QString temp = STRING.c_str();
QStringList temp1 = temp.split(" ");
QString tmp = temp1[0];
floatArray[gl].response = tmp.toFloat();
tmp = temp1[1];
floatArray[gl].angle = tmp.toFloat();
tmp = temp1[2];
floatArray[gl].size = tmp.toFloat();
tmp = temp1[3];
floatArray[gl].class_id = tmp.toInt();
if(firstRun2 == true)
qDebug() << "A:"
<< floatArray[gl].response
<< floatArray[gl].angle
<< floatArray[gl].size
<< floatArray[gl].class_id; //TAKE NOTE
int xs = tmp.toInt();
kpPerGroup[xs]++;
gl++;
}
}
infile.close();
if(d < totalGroups)
{
endFile = false;
}
}
for (int d = 0; d < totalKeyPoints; d++)
{
if(firstRun2 == true)
qDebug() << "B:"
<< floatArray[d].response
<< floatArray[d].angle
<< floatArray[d].size << floatArray[d].class_id; //TAKE NOTE
}
我已在此pastebin中记录了两个qDebug
命令的输出:with A and B
为什么我会出现这种行为?有没有办法让我能够在整个代码中只有SET A值?
答案 0 :(得分:3)
我猜你想要你的“A”调试输出实际上是:
qDebug() << "A:" << floatArray[gl].response << floatArray[gl].angle << \
floatArray[gl].size << floatArray[gl].class_id;
对所有索引使用gl
而不是d
用于最后三个索引。在第一个循环中,索引d
似乎与floatarray[]
无关。充其量你会得到不正确的输出,最坏的情况是阵列溢出/崩溃。