0

次のプログラムがあります。

#include<iostream>
#include<map>

using namespace std;

int  *ar;

int main(int argc, const char *argv[])
{
    int N,i;
    map <int , int> W;
    ar = new int[N+1];
    cin >> N;
    for (i = 1; i <= N; i++) {
        cin >> ar[i];
    }
    W[ar[N]]= -1;   
    return 0;
}

プログラムに次の入力を行います。

6

1 1 2 2 3 4

g++ -O オプション (最適化なし) を使用して上記のコードをコンパイルすると、次の行で segabrt が取得されます。

W[ar[N]]= -1;

2 つの質問:

  1. ar[] が new によってメモリを割り当てられていないということですか? 行を定数値で置き換えると、同じエラーが発生します。

    W[4] = -1;
    
  2. マップに必要な初期化はありますか? 通常、初期化なしで動作します。

4

1 に答える 1

7

次の 2 行が逆になっています。

ar = new int[N+1];   // Here the value of 'N' is undefined (random)
                     // So the number of values you get is also random (+1)
cin >> N;

N使用する前にロードする必要があります。

cin >> N;
ar = new int[N+1];  // Now N is defined and you get the requested number of values.
于 2012-12-29T08:45:43.323 に答える