首页 > 解决方案 > c++中动态内存分配的问题

问题描述

当我试图解决一个hackerrank问题时,我脑子里有个问题。我的问题是我想用指针分配一些内存,我用两种方法做到了这一点,但其中一种导致了问题。另一种没有问题。

Hackerrank 问题就在这里 1. 在此处 输入图片描述

Hackerrank 问题在这里 2. 在此处输入图片描述

Hackerrank 问题就在这里 3. 在此处输入图片描述

这段代码没有问题。

int x,y,z;
cin>>x>>y;
int *arr[x];
for(int i=0;i<x;i++){
    int z;
    cin>>z;
    arr[i] = new int[z];
    for(int j=0;j<z;j++){
        cin >> arr[i][j]; 
    }
    
}
int *arr2[y];
for(int k=0;k<y;k++){
    arr2[k] = new int[2];
    for(int tt=0;tt<2;tt++){
        cin >> arr2[k][tt];
    }
    
}
for(int i = 0;i<y;i++){
    
        cout<<arr[arr2[i][0]][arr2[i][1]]<<endl;
    
}

我的问题在这里。

**定义 int *arr = new int[x]; 的问题是什么?而不是 *arr[x] 我想用指针进行新的分配。它们两个都不一样吗?我不明白。** *如果 a 定义 int arr = new int[x]; 那么问题是 arr[i] = new int[z];

int x,y,z;
cin>>x>>y;
int *arr = new int[x];  **<-- **
for(int i=0;i<x;i++){
    int z;
    cin>>z;
    arr[i] = new int[z];   **<-- problem**
    for(int j=0;j<z;j++){
        cin >> *arr[i][j]; 
    }
    
}
int *arr2 = new int[y];
for(int k=0;k<y;k++){
    arr2[k] = new int[2];
    for(int tt=0;tt<2;tt++){
        cin >> *arr2[k][tt];
    }
    
}
for(int i = 0;i<y;i++){
    
        cout<<*arr[*arr2[i][0]][*arr2[i][1]]<<endl;
    
}


  
return 0;

标签: c++algorithmpointersmemory-managementdynamic-memory-allocation

解决方案


您正在尝试从数组制作矩阵(二维数组)。你应该这样写:

int **matrix = new int*[x]; //pay attention to number of asterisks
for(int i = 0; i < x; ++i)
{
  matrix[i] = new int[z];
}

int *arr[x]类似于int **matrix = new int*[x]。它创建一个x未定义大小的数组数组。

PS:在 C++ 中使用指针被认为是一种不好的做法。你应该std::vector改用。这是一个例子:

std::vector<std::vector<int>> matrix(x);
for(int i = 0; i < x; ++i)
{
  matrix[i] = std::vector<int>(z);
}

PPS:别忘了#include <vector>


推荐阅读