元素数量未知的内存分配

Memory allocation with unknown number of elements

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


    <code>int i = 0;
    int *layer;
    while (i != 12){
        layer = new int;
        layer[i] = i;
        cout << layer[i] << endl;
        i++;
    }
    delete[] layer;
    return 0;
    
我得到了结果;

<code>0
1
2
3
4
5
6
    
然后程序崩溃。这是什么原因,我应该如何修改程序以便为未知数量的元素分配内存? 提前致谢!

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

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

然后你泄漏了内存,然后你在最后更新的 int 上调用 delete[]。由于不清楚你想用你的代码做什么,我只能提供一些建议:

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