具有未知数量元素的内存分配

时间:2015-03-07 15:36:06

标签: c++ new-operator

由于元素的数量是由某些条件决定的,我写了一个像这样的程序;     


    int i = 0;
    int *layer;
    while (i != 12){
        layer = new int;
        layer[i] = i;
        cout << layer[i] << endl;
        i++;
    }
    delete[] layer;
    return 0;
    
我得到了结果;     
int i = 0;
    int *layer;
    while (i != 12){
        layer = new int;
        layer[i] = i;
        cout << layer[i] << endl;
        i++;
    }
    delete[] layer;
    return 0;
然后程序崩溃。这是什么原因以及如何修改程序以便为未知数量的元素分配内存? 提前致谢!

1 个答案:

答案 0 :(得分:1)

您有未定义的行为。您为单个int分配空间,然后将其视为数组。

layer = new int; // single int
layer[i] = i;    // wat??

然后泄漏内存,然后在最后一个新发布的delete[]上调用int。由于不清楚您想要对代码执行什么操作,因此我只能提供一些建议:

  • 考虑将std::vector<int>用作动态数组。它会为你节省很多麻烦。
  • 如果您必须使用new分配数组(您可能不会),则需要new int[n],其中n是元素数。
  • delete []次致电new[]deletenew