如果一次加载太多,int值是否可以重置? 在我的C++项目中,我有一些int值(具体地说我是其中的两个)。这些值是在用户加载文件时输入的。他们的价值观在整个项目中永远不会改变

如果一次加载太多,int值是否可以重置? 在我的C++项目中,我有一些int值(具体地说我是其中的两个)。这些值是在用户加载文件时输入的。他们的价值观在整个项目中永远不会改变,c++,qt,memory-management,int,qstring,C++,Qt,Memory Management,Int,Qstring,稍后在我的程序中,我将大约30MB的数据加载到大约3000个QString变量(4个数组)中。似乎在加载了一定数量的字符串后,我的int值重置为零。我只在程序的开始和结束时使用它们 我没有放任何源代码,只是因为我的程序太大了,而且我觉得把所有的源代码放在网上并不舒服 所以我的问题是,是否有可能因为新的变量被填充而“重置”某些变量?我没有收到错误或冻结,就像我期望从错误的分配。这让我完全困惑不解 谢谢您的时间:) 编辑: 这就是我注意到的int值被重置的确切位置。顺便说一句,所有这些代码在编辑少量

稍后在我的程序中,我将大约30MB的数据加载到大约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
            }
        }
    }
}
//这些循环输入2916个文件,每个文件大约10kb。它们被加载到4个QString数组中。
如果(OregionBR!=“空”)
{

对于(intz=0;z,如果程序中有错误,可以重置变量。这称为内存损坏,有很多原因


如果您需要帮助解决程序中的错误,您必须向我们展示代码。请尝试生成一个较小版本的程序,该程序仍然存在相同或类似的问题。

是否可能超出范围?类似于

 int temp = value_larger_than_MAX_INT;
在这种情况下,该值将被截断,因此您可能会看到0,或者看到较小的数字,而不是非常大的数字。 在读完代码后,我听起来似乎很有道理,所以请考虑使用无符号int代替int,或者甚至使用长。
希望这有帮助!

这些变量是局部变量还是全局变量?如果它们是全局变量,您是否对其进行阴影处理(即重新声明)它们在某些函数中作为局部变量?您是否在某些数组的边界之外编写?从您的程序创建一个数组。这样,您就不需要将大型程序的源代码放到web上,我们可以更仔细地检查问题。要进行调试,您可以检查,例如,使用一些打印语句,在数组归零时。顺便说一下,如果你在一个受支持的平台上,像这样的工具对于调试内存问题是非常有用的。如果你的平台没有Valgrind,它可能是Visual Studio,甚至更简单:只需在
int
变量上设置一个数据断点。好的。我会用我注意到它重置的确切位置编辑我的帖子。好的,但这不太可能是问题是。除非你有一个完整的程序来处理,否则很难找到这种问题。正如我说的,试着生成一个代码的精简版本(这仍然是一个完整的程序)我在注意到它重置的地方添加了循环。我怀疑它会有多大帮助,因为我不认为这是语法错误,更像是逻辑错误。考虑到发布的代码,首先要检查的是
OBLChunks[(zPos*27)+xPos]
表达式。你确定
(zPos*27)+xPos
即将推出
OBLChunks
?很抱歉离开。结果它超出了它的范围。:)它是负数。非常感谢!很抱歉已经过了一个月,但这不是问题所在。我用一种非常愚蠢的方式解决了问题。我只是在它旁边做了另一个变量,名为“int\u var2”因为某种原因,这个变量没有重置。。。。