C ++源代码错误

时间:2016-02-18 13:31:36

标签: c++ arrays file c++11 vector

有人可以告诉我如何修复错误吗?如果我将数组更改为c ++ 11的vector也会更好吗?我会获得任何优势吗?也有人可以告诉我是否有任何方法可以改进我的代码?

#include <iostream>
#include <fstream>
//#define long long 100000000;
//#define int 1000;

using namespace std;
void ts1(int *zone);
void ts2();
void ts3();
int p,n,m;
struct lazer{
    int x;
    int y;
    int direction;

};
//int z[4]={1,1,1,1}
int main()
{
   // int p,n;
   // long z;
    std::ifstream file;
    file.open("input.txt");
    file >> p;
    file >>n>>m;
    lazer Bem[m];
   // long * sir = new long[2*n];
   // long sir[2*n] ;
    int *zone[n][n];
    for (int i=0;i< n;i++)
        for (int j=0;j< n;j++)
            file>>zone[i][j];
        //file >> sir[i];

    for (int k=0;k<m;k++){
            file >> Bem[k].x;
            file >> Bem[k].y;
            file >> Bem[k].direction;
    }
    file.close();
    for(int z1=0;z1<m;z1++){
        switch(Bem[z1].direction){
            case 1:
                for(int zt=n-Bem[z1].x;zt<n;z1++)
                {

                    zone[zt][Bem[z1].y]=zone[zt][Bem[z1].y] -1;
                }
        }

    }


    if (p==1)ts1(zone);
    else ts2();
   // else ts3();
//    delete [] sir;
    return 0;
}
void ts1(int *zone){
    int gropi=0;
    static int* mutari[8][2]={{-1,0}, {-1, -1}, {0, -1}, {1, -1}, {1, 0}, {1, 1}, {0, 1}, {-1, 1}};//{{-1,0},{0,1},{1,0},{0,-1}}
    for (int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            for(int z=0;z<8;z++){
                int ni=i+mutari[z][0];
                int nj=j+mutari[z][1];
                if(zone[i][j] <= zone[ni][nj])gropi++;
            }

        }

    }

}
void ts2(){
    cout << "d";
}
void ts3(){
    cout << "d";
}

错误:

void ts1(int **zone){
    int gropi=0;
    static int mutari[8][2]={{-1,0}, {-1, -1}, {0, -1}, {1, -1}, {1, 0}, {1, 1}, {0, 1}, {-1, 1}};//{{-1,0},{0,1},{1,0},{0,-1}}
    for (int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            for(int z=0;z<8;z++){
                int ni=i+mutari[z][0];
                int nj=j+mutari[z][1];
                if(zone[i][j] <= zone[ni][nj])gropi++;
            }

        }

    }
    cout <<gropi;
}

在此部分cout <<gropi;将使exe停止。为什么?

1 个答案:

答案 0 :(得分:1)

我没有通过你的完整代码,但我查看了main()方法。 我发现很少有问题;

lazer Bem[m];

你不能像这样声明数组,因为它在编译时需要精确的大小。你需要使用指针动态分配内存。

我在main()方法中做了一些修改;

//int z[4]={1,1,1,1}
int main()
{
   // int p,n;
   // long z;
    std::ifstream file("input.txt");

    file >> p;
    file >>n>>m;

    lazer* Bem = new lazer[m];
    int **zone = new int*[n];

    for (int i=0;i< n;i++)
    {
        zone[i] = new int[n];
        for (int j=0;j< n;j++)
        {
            file>>zone[i][j];
        }
    }
        //file >> sir[i];

    for (int k=0;k<m;k++){
            file >> Bem[k].x;
            file >> Bem[k].y;
            file >> Bem[k].direction;
    }
    file.close();
    for(int z1=0;z1<m;z1++){
        switch(Bem[z1].direction){
            case 1:
                for(int zt=n-Bem[z1].x;zt<n;z1++)
                {

                    zone[zt][Bem[z1].y]=zone[zt][Bem[z1].y] -1;
                }
        }

    }


    if (p==1)ts1(zone);
    else ts2();
   // else ts3();
//    delete [] sir;
    return 0;
}

您可以类似地修改其他方法。

希望它有所帮助。