在我的C ++项目中,我有一些int值(我特别关注其中两个)。用户加载文件时输入这些值。他们的价值观(应该)永远不会在整个计划中发生变化。
稍后在我的程序中,我将大约30 MB的数据加载到大约3000个QString变量(4个数组)中。似乎在加载了一定数量的字符串后,我的int值重置为零。我只在课程的开头和结尾使用它们。
我没有放任何源代码只是因为我的程序非常庞大,我觉得将所有源代码都放在网上感觉不舒服。
所以我的问题是,某些变量是否可能被“重置”,因为新变量正在被填充?我没有错误或冻结,就像我对错误分配的期望一样。这让我完全不解。
感谢您的时间:)
编辑: 这是我注意到我的int值被重置的确切位置。顺便说一句,所有这些代码在编辑少量文件时都有效。
//These loops input 2916 files each around 10kb. They are loaded into 4 QString arrays.
if(OregionBR != "Null")
{
for(int z=0; z <=26; z++)
{
for(int x=0; x <=26; x++)
{
temp_hex = OregionBR.mid((z*256)+(x*8), 6);
if(temp_hex != "000000")
{
temp_hex.append("000");
HexToInt(temp_hex, temp_int);
//Here, the files are input.
Input("stuff\\regions\\xbox_chunks\\br\\" + QString::number(temp_int) + ".dat", temp_chunk);
//... minor file changes
//The file is then loaded into the array
OBRChunks[(zPos*27) + xPos] = temp_chunk;
//... minor file changes
}
}
}
}
//level_ptr is my int value. This number is around 150,000
QMessageBox::information(this, "test", QString::number(level_ptr));
if(OregionBL != "Null")
{
for(int z=0; z <=26; z++)
{
for(int x=0; x <=26; x++)
{
temp_hex = OregionBL.mid((z*256)+(x*8)+40, 6);
if(temp_hex != "000000")
{
temp_hex.append("000");
HexToInt(temp_hex, temp_int);
Input("stuff\\regions\\xbox_chunks\\bl\\" + QString::number(temp_int) + ".dat", temp_chunk);
//... minor file changes
OBLChunks[(zPos*27) + xPos] = temp_chunk;
//... minor file changes
}
}
}
}
//level_ptr is my int value. This number is around 150,000
QMessageBox::information(this, "test", QString::number(level_ptr));
if(OregionTR != "Null")
{
for(int z=0; z <=26; z++)
{
for(int x=0; x <=26; x++)
{
temp_hex = OregionTR.mid((z*256)+(x*8)+1280, 6);
if(temp_hex != "000000")
{
temp_hex.append("000");
HexToInt(temp_hex, temp_int);
Input("stuff\\regions\\xbox_chunks\\tr\\" + QString::number(temp_int) + ".dat", temp_chunk);
//... minor file changes
OTRChunks[(zPos*27) + xPos] = temp_chunk;
//... minor file changes
}
}
}
}
//index_ptr is my int value. NOW IT SAYS LEVEL_PTR IS 0!
QMessageBox::information(this, "test", QString::number(level_ptr));
if(OregionTL != "Null")
{
for(int z=0; z <=26; z++)
{
for(int x=0; x <=26; x++)
{
temp_hex = OregionTL.mid((z*256)+(x*8)+1320, 6);
if(temp_hex != "000000")
{
temp_hex.append("000");
HexToInt(temp_hex, temp_int);
Input("stuff\\regions\\xbox_chunks\\tl\\" + QString::number(temp_int) + ".dat", temp_chunk);
//... minor file changes
OTLChunks[(zPos*27) + xPos] = temp_chunk;
//... minor file changes
}
}
}
}
答案 0 :(得分:0)
如果程序中有错误,可以重置变量。这称为内存损坏,原因很多。
如果您需要有关程序中的错误的帮助,则必须向我们展示代码。尝试生成程序的较小版本,但仍有相同或类似的问题。
答案 1 :(得分:0)
你有可能超出范围吗?
之类的东西 int temp = value_larger_than_MAX_INT;
在这种情况下,该值将被截断,因此您可能会看到0或小数而不是非常大的数字。 在阅读完代码之后,我觉得这听起来似乎是合理的,所以考虑使用unsigned int而不是int,甚至是long。
希望这有帮助!