c++动态内存分配问题
Problem for dynamic memory allocation in c++
当我试图解决 hackerrank 问题时,我的 mind.My 问题是我想用指针分配一些内存,我用两种方法做到了这一点,但其中一种导致了problem.Other一个没问题。
Hackerrank 问题在这里 1.
enter image description here
Hackerrank 问题在这里 2.enter image description here
Hackerrank 问题在这里 3.enter image description here
这段代码没有问题。
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] 我想用 pointer.Is 进行新分配,它们都不相同?我不明白。 **
*如果定义一个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;
您正在尝试从数组创建矩阵(二维数组)。你应该这样写:
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
个大小未定义的数组。
P.S:在 C++ 中使用指针被认为是一种不好的做法。您应该改用 std::vector
。这是一个例子:
std::vector<std::vector<int>> matrix(x);
for(int i = 0; i < x; ++i)
{
matrix[i] = std::vector<int>(z);
}
P.P.S:别忘了#include <vector>
.
当我试图解决 hackerrank 问题时,我的 mind.My 问题是我想用指针分配一些内存,我用两种方法做到了这一点,但其中一种导致了problem.Other一个没问题。
Hackerrank 问题在这里 1. enter image description here
Hackerrank 问题在这里 2.enter image description here
Hackerrank 问题在这里 3.enter image description here
这段代码没有问题。
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] 我想用 pointer.Is 进行新分配,它们都不相同?我不明白。 ** *如果定义一个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;
您正在尝试从数组创建矩阵(二维数组)。你应该这样写:
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
个大小未定义的数组。
P.S:在 C++ 中使用指针被认为是一种不好的做法。您应该改用 std::vector
。这是一个例子:
std::vector<std::vector<int>> matrix(x);
for(int i = 0; i < x; ++i)
{
matrix[i] = std::vector<int>(z);
}
P.P.S:别忘了#include <vector>
.