我有以下程序:
#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;
两个问题:
是不是ar []没有被新分配的内存?如果我用一些常数值替换该行,我会得到同样的错误。
W[4] = -1;
地图需要进行某种初始化吗?它通常在没有初始化的情况下工作。
答案 0 :(得分:7)
你有这两行:
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.