如果一次加载太多,可以重置int值吗?

时间:2013-11-20 08:28:20

标签: c++ qt memory-management int qstring

在我的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
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

如果程序中有错误,可以重置变量。这称为内存损坏,原因很多。

如果您需要有关程序中的错误的帮助,则必须向我们展示代码。尝试生成程序的较小版本,但仍有相同或类似的问题。

答案 1 :(得分:0)

你有可能超出范围吗?

之类的东西
 int temp = value_larger_than_MAX_INT;

在这种情况下,该值将被截断,因此您可能会看到0或小数而不是非常大的数字。 在阅读完代码之后,我觉得这听起来似乎是合理的,所以考虑使用unsigned int而不是int,甚至是long。

希望这有帮助!