【问题标题】:How to initialize a dynamically sized array in C++11 standard?如何在 C++11 标准中初始化动态大小的数组?
【发布时间】:2016-12-21 01:31:48
【问题描述】:

这是我的一段代码。

    int** n;
    for (int i = 0; i < N; ++i){
        int size;
        cin >> size;
        int* n[i] = new int[size]; //line 13
        for (int j = 0; j < size; ++j){
            cin >> n[i][j];
        }
    }

这是编译时弹出的错误。

solution.cc:在函数'int main()'中:

solution.cc:13:33: 错误:数组必须用大括号括起来的初始化程序进行初始化

int* n[i] = new int[size];

我意识到这可以使用向量来完成,因为它们在动态处理内存方面要好得多。但是我不允许在这个挑战中使用向量。我被允许使用的唯一标头是“iostream”。

我读到,在 C++11 中,语法已被修改为 new:

    p = new T [N] {initializer1, ..., initializerN};

来源:https://en.wikipedia.org/wiki/New_and_delete_(C%2B%2B)#Overview

但我的代码仍然会为类似的变体产生相同的错误。

有没有办法完全绕过初始化错误?如果不是,则假设这些值被初始化为最好是相同的值。

【问题讨论】:

  • n[i] = new int[size]; 会让你摆脱编译器错误。但是,n 是一个未初始化的指针,而您正试图取消对它的引用,因此您的程序表现出未定义的行为。
  • Igor - 添加这个作为答案

标签: c++ arrays c++11 initialization dynamic-memory-allocation


【解决方案1】:

这应该可以解决您的问题。

int** n = new int*[N];

for (int i = 0; i < N; ++i){
    int size;
    cin >> size;
    n[i] = new int[size];

    for (int j = 0; j < size; ++j){
        cin >> n[i][j];
    }
}

【讨论】:

    【解决方案2】:

    我相信(恕我直言)您并没有寻找真正的问题。

    你已经声明了一个双指针:

    int** n;
    

    然后您忘记为指针数组分配内存,例如:

    n = new int*[N]
    

    在为数组(指针)的每个指针分配内存之前,此步骤是必要的。

    此外,我认为您的行应该是:

    n[i] = new int[size]
    

    否则,您将重新声明 n+i 的类型。

    【讨论】:

      【解决方案3】:

      帮自己一个忙,停止使用原始指针。尽可能使用 std::vector 代替原始数组 - 类似以下内容:

      std::vector<std::vector<int>> n(N);
      for (int i = 0; i < N; ++i){
          int size;
          cin >> size;
          n[i].resize(size);
          for (int j = 0; j < size; ++j){
              cin >> n[i][j];
          }
      }
      

      【讨论】:

      • > 我意识到这可以使用向量来完成,因为它们在动态处理内存方面要好得多。但是我不允许在这个挑战中使用向量。
      • 不幸的是,这个答案并不能解释 OP 代码的实际问题。因此,我认为这对任何尝试学习 C/C++ 的人都没有帮助。
      猜你喜欢
      • 2021-05-17
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-22
      • 1970-01-01
      • 2014-11-29
      相关资源
      最近更新 更多