-3

私は C++ プログラムを書きましたが、実際にはゲームです。私はこのエラーを受け取りました:

Windows は bla bla でブレークポイントをトリガーしました...

誰かが私を助けることができますか?
これはコードですが、回線 AAA でエラーが発生します。

void r_motions(char **map,int size)
{
    int parameter_i,parameter_j,player_i,player_j;
    int *r_location_i = new int[1],*r_location_j = new int[1];
    player_finder(map,size,player_i,player_j);
    int r_num = robots_finder(map,size,r_location_i,r_location_j);
    for(int i=1;i<=r_num;i++)
    {
        parameter_i =0;
        parameter_j =0;
        if(r_location_i[i]>player_i) parameter_i = -1;
        if(r_location_i[i]<player_i) parameter_i =  1;
        if(r_location_j[i]>player_j) parameter_j = -1;
        if(r_location_j[i]<player_j) parameter_j =  1;
        map[r_location_i[i]][r_location_j[i]] = '.';
        r_location_i[i] = r_location_i[i]+parameter_i;
        r_location_j[i] = r_location_j[i]+parameter_j;
    }
    for(int i=1;i<=r_num;i++)
    {
        switch (map[r_location_i[i]][r_location_j[i]])
        {
        case '.': 
            map[r_location_i[i]][r_location_j[i]] = '+';
            break;
        case '@': 
            map[r_location_i[i]][r_location_j[i]] = '+';
            print_map(map,size);
            cout << "Robots win ." << endl;
            sleep(1000);
            exit(1);
            break;
        case '+':
            map[r_location_i[i]][r_location_j[i]] = '*';
            break;
        case '*': 
            map[r_location_i[i]][r_location_j[i]] = '*';
            break;
        default: cout << "what r u doin' ??";
            break;
        }
    }
}
4

1 に答える 1

3

わかりました、手始めに、これを見てください:

int *r_location_i = new int[1], ...;
...
for(int i=1;i<=r_num;i++)
  {
    parameter_i =0;
    ...
    if(r_location_i[i]>player_i) parameter_i = -1; // reading outside the array
    ...
    r_location_i[i] = r_location_i[i]+parameter_i; // writing outside the array
    ...
  }

戻って配列を勉強してください。上記のコードの何が問題なのかが正確にわかるまで、別のポインターに触れないでください。

于 2012-10-03T15:36:41.597 に答える