3

我尝试了以下代码,但运行时出现错误。我使用过 Debugger,但我无法理解调用堆栈中的错误。

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    int a[10][2],i,j, b[10],max, min;
    ifstream f("numere.txt");

    for(i=1;i<=10;i++)
    {
        for(j=1;j<=2;j++)
        {
            f>>a[i][j];
            b[i]=0;
        }
    }

    for(i=1;i<=10;i++)
    {
        for(j=1;j<=2;j++)
        {
            b[i]=b[i]+a[i][j];
        }
    }

    max=b[1];
    min=b[1];

    for(i=1;i<=5;i++)
    {
        if(max<=b[i]) max=b[i];
        if(min>=b[i]) min=b[i];
    }

    cout<<"Cea mai mare suma este:"<< max<<endl;
    cout<<"Cea mai mica suma este:"<< min<<endl;


    f.close();
    return 0;

}

调用堆栈截图

请帮我。我是初学者,以前从未使用过文件。

4

3 回答 3

2

您至少有一个错误:数组索引超出范围:

 for(i= 0;i<10;i++)
{   //^^^
    for(j=0;j< 2;j++)
    { //^^^
        f>>a[i][j];
        b[i]=0; //Why you put b[i] here??
    }
}

由于您声明a[10][2]和数组索引从 开始0,而不是1在 C++ 中。您将访问不属于a(和b)的内存。

于 2013-07-23T18:11:16.560 回答
2

C++ 数组中的第一个索引是0,而不是1

尝试在循环中从09,而不是从110

您可以在此处获取有关 C++ 数组的更多信息。

于 2013-07-23T18:11:50.460 回答
1

这里突出的第一个错误是您1在 C++ 数组索引中开始您的数组访问0,这也意味着您在 for 循环中也越界访问,例如:

for(i=1;i<=10;i++)
    ^^^  ^^

应该:

for(i=0;i<10;i++)

在分配的内存之外访问内存是未定义的行为,并且可能导致任何甚至看起来可以工作的代码。

于 2013-07-23T18:12:36.357 回答