gpt4 book ai didi

c++ - 在main()外部访问二维数组会导致运行时段错误?

转载 作者:行者123 更新时间:2023-12-02 10:06:09 25 4
gpt4 key购买 nike

尝试通过传递其地址作为参数来访问函数fill()中的静态数组

#include <iostream>
using namespace std;

void fill(int val, int n, int m, int **arr){
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
arr[i][j] = val;
arr[i][j] = val;
}
}
}

int main(){

int n = (cin>>n, n);
int m = (cin>>m, m);

int arr[n][m];
fill(1, n, m, (int**)arr);
}

如果不允许我们将main()函数转换为双指针访问 arr[n][m] 2-D数组,那么在 main()之外访问该内存的正确方法是什么?

Solution:


void fill(int val, int n, int m, int *arr){
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
*(arr + i * m + j) = val;
}
}
}

int main(){

int n = (cin>>n, n);
int m = (cin>>m, m);

int arr[n][m];
fill(1, n, m, &arr[0][0]);
}

最佳答案

关于可变大小的数组,请阅读Why aren't variable-length arrays part of the C++ standard?

由于您使用的是C++,因此我建议使用该语言提供的容器之一来存储数据,在这种情况下,这是 vector 的 vector 。

Live Sample

#include <iostream>
#include <vector>

using namespace std; // for test purposes shouldn't be used

void fill(int val, int lines, int cols, vector<vector<int>>& matrix){
for (int i = 0; i < lines; i++){
vector<int> v;
for (int j = 0; j < cols; j++)
v.push_back(val);
matrix.push_back(v);
}
}

int main() {

int lines, cols;
vector<vector<int>> matrix;

cout << "lines and columns: " << endl;
cin >> lines >> cols;

fill(1, lines, cols, matrix);
}

如果必须使用数组,我认为更好的方法是使用C风格动态分配内存:

Live Sample
#include <iostream>   

using namespace std; // for test purposes, shouldn't be used

void fill(int val, int n, int m, int *arr){
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
*(arr+i+j) = val;
}
}
}

int main(){

int n, m;
cout << "lines and columns: " << endl;
cin >> n >> m;

int* arr = (int*) malloc(sizeof(*arr) * n * m) ;
fill(1, n, m, arr);
}

关于c++ - 在main()外部访问二维数组会导致运行时段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60115360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com