动态输入数组

Dynamically input Array

本文关键字:数组 输入 动态      更新时间:2023-10-16

我想创建一个二维数组。用户将输入 # 行和 # 列。我不知道为什么我在编译时遇到"分段错误(核心转储)"。

#include 使用命名空间标准;

int main(){
  int **array;
  int x,y;
  cout<<"input dimention rows*columns  "<<endl;
  cin>>y>>x;
 * array=new int[y];
  for (int i=0; i<y;i++){array[i]=new int[x];}
  for (int i=0;i<y;i++){
    for (int n=0;n<x;n++){
      array[i][n]=(i+1)*(n+1);
    }}
  cout<<array[1][2]<<endl;
}

当你这样做时:

*array=new int[y];

您尚未为array分配任何内存以指向。您需要array指向指向int的指针的大小y数组。

但是您可以使用std::vector<std::vector<int>>而不是动态分配的数组安全地实现这一点。

std::vector<std::vector<int>> (y, std::vector<int>(x));
* array=new int[y];

在这里,您正在取消引用array但由于它是未初始化的,因此将导致未定义的行为。

*可能只是一个错字。以下内容将执行您想要的操作:

 array=new int*[y];
^             ^

即创建一个整数指针数组。然后,您可以在第一个循环中为每个指针分配内存。

但是,这是C++,而不是 C,因此仅使用 std::vector<std::vector<int>> 而不是 int** 会更容易做到。