C++ 代码在我的系统上运行良好,但在USACO上出现分段错误。什么问题?

C++ 代码在我的系统上运行良好,但在USACO上出现分段错误。什么问题?,c++,C++,这段代码我试图在UASCO上运行,不知道是什么问题,它的失败与分段错误有关。 帮我做这个 了解如何调试分段问题也会有所帮助。 有没有好的教程,可以给我的基础知识,并告诉我如何调试 # include <iostream> # include <string> # include <fstream> using namespace std; struct member { string mainMem; int amount; int myAmount;

这段代码我试图在UASCO上运行,不知道是什么问题,它的失败与分段错误有关。 帮我做这个 了解如何调试分段问题也会有所帮助。 有没有好的教程,可以给我的基础知识,并告诉我如何调试

 # include <iostream>
# include <string>
# include <fstream>

using namespace std;

struct member
{
string mainMem;
int amount;
int myAmount;
int noOfMem;
string toGiveMem[10];
};

 int main()
 {
ofstream fout ("gift1.out");
ifstream fin ("gift1.in");
int totalMem;
member allMem[totalMem];
string name;
fin>>totalMem;

for( int i = 0; i<totalMem; i++)
{
    fin>>allMem[i].mainMem;
    allMem[i].myAmount = 0;
}

while(!fin.eof())
{
    fin>>name;
    for( int i = 0; i<totalMem; i++)
    {
        if(name.compare(allMem[i].mainMem)==0)
        {
            fin>>allMem[i].amount;
            fin>>allMem[i].noOfMem;
            for(int j = 0; j< allMem[i].noOfMem; j++)
                fin>>allMem[i].toGiveMem[j];
        }
    }

}
// all input taken.
cout<<" Do processing."<<endl;
for(int i = 0; i< totalMem; i++)
{

    int x =0;
    if(allMem[i].noOfMem != 0)
        x = allMem[i].amount/allMem[i].noOfMem;

    allMem[i].myAmount += allMem[i].amount- (x*allMem[i].noOfMem);

    for(int j = 0; j <allMem[i].noOfMem; j++)
    {

        for(int k = 0; k< totalMem; k++)
        {

            if(allMem[i].toGiveMem[j].compare(allMem[k].mainMem) == 0)
            {
                allMem[k].myAmount += x;
                break;
            }
        }
    }
}
#包括
#包括
#包括
使用名称空间std;
结构成员
{
字符串mainMem;
整数金额;
int myAmount;
内特诺夫姆;
字符串toGiveMem[10];
};
int main()
{
流式输出(“gift1.out”);
ifstream fin(“gift1.in”);
int totalMem;
成员allMem[totalMem];
字符串名;
fin>>totalMem;
对于(int i=0;i>allMem[i].mainMem;
allMem[i].myAmount=0;
}
而(!fin.eof())
{
fin>>名称;
对于(int i=0;i>allMem[i]。金额;
fin>>所有成员[i].noOfMem;
for(int j=0;j>allMem[i].toGiveMem[j];
}
}
}
//所有输入均已完成。

请看一下这些行:

int totalMem;
member allMem[totalMem];
string name;
fin>>totalMem;
声明数组时,什么是
totalMem


我原以为这会显示为编译器警告。

除了已经接受的答案之外:

无论何时读取文件,都必须确保读取成功,否则不能使用变量

错误代码:

int totalMembers;
fin >> totalMembers;
好代码:

int totalMembers;
if (fin >> totalMembers) {
  // now totalMembers is guaranteed to be defined
}

此外,您不应该在循环中使用
eof
函数。相反,在读取变量时使用上述检查。如果失败(返回
false
),您可能已到达文件末尾,或者出现I/O错误。在这种情况下,您可以使用
eof
bad
来区分这些情况。

您应该剪切并粘贴代码,此代码缺少一个右括号…更不用说它有点难看。谢谢,我只需要将语句重新排序为:int totalMem;string name;fin>>totalMem;成员allMem[totalMem];