c++ - 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;
解决方案
您正在尝试从数组制作矩阵(二维数组)。你应该这样写:
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>
。
推荐阅读
- r - inf_mr 不使用 xaringan 幻灯片刷新
- php - PHP Oracle 更新表错误 - oci_execute ORA-00933
- python - 无法连接到 Jupyter Notebook
- android - android分页如何刷新数据?
- c++ - 将向量元素复制到向量对
- python - 尝试用 Python 构建 Web 服务器和客户端程序
- sql - 您如何将 OrderID 添加到此?我无法在所有 OrderID 部分都出现错误的情况下显示它
- android - 在浏览器中打开外部 WebView 链接
- database - 将 flink 流写入关系数据库
- node.js - 什么是 .clientrc 文件?