什么时候分配新的内存?

时间:2012-12-29 08:42:11

标签: c++ memory-management map new-operator

我有以下程序:

#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;

两个问题:

  1. 是不是ar []没有被新分配的内存?如果我用一些常数值替换该行,我会得到同样的错误。

    W[4] = -1;
    
  2. 地图需要进行某种初始化吗?它通常在没有初始化的情况下工作。

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.