gpt4 book ai didi

c++ - 在函数之间的堆上传递数组时导致此运行时错误的原因,c++

转载 作者:太空宇宙 更新时间:2023-11-04 15:22:22 25 4
gpt4 key购买 nike

当我在接受双指针的函数之间传递在堆上声明的二维数组时,我无法解释为什么我的程序会挂起和崩溃。

我有一种强烈的感觉,它与我选择的声明二维数组的方法有关。在我创建一个函数来分配数组之前,程序可以在传递给函数时操作数组中的数据。

所以这是分配函数,然后是它在内部崩溃的函数:

void matrix_malloc(int **matrix, int m, int n);
void matrix_init(int **matrix, int m, int n);

int main(void)
{
int **matrix;
int m(3), n(2);

matrix_malloc(matrix, m, n);
matrix_init(matrix, m, n); // runtime error
}

void matrix_malloc(int **matrix, int m, int n)
{ // get heap memory
int i;
matrix = new int*[m];
for(i = 0; i < m; i++)
{
matrix[i] = new int[n];
}
}

void matrix_init(int **matrix, int m, int n)
{ // randomize matrix
int i, j;
for(i = 0; i < m; i++)
{
for(j = 0; j < n; j++)
{
matrix[i][j] = rand() % 10 + 1;
}
}
}

最佳答案

您必须通过引用传递您的矩阵指针。

void matrix_malloc(int **matrix, int m, int n)

这接受矩阵的拷贝。这意味着您在 matrix 上的 matrix_malloc 中所做的任何事情都不会影响 main 中的内容。

应该是

void matrix_malloc(int **& matrix, int m, int n)
^^^

但是我建议您使用 vector 而不是原始指针和分配。这样你就不需要担心分配和释放。

void matrix_malloc(vector<vector<int> >& matrix, int m, int n);

// You don't need this anymore.
// void matrix_init(int **matrix, int m, int n);

int main(void)
{
vector<vector<int> > matrix;
int m(3), n(2);

// matrix_malloc(matrix, m, n);

matrix_init(matrix, m, n);
}


void matrix_init(vector<vector<int> >& matrix, int m, int n)
{ // randomize matrix
int i, j;
for(i = 0; i < m; i++)
{
vector<int> row;
for(j = 0; j < n; j++)
{
row.push_back(rand() % 10 + 1);
// matrix[i][j] = rand() % 10 + 1;
}
matrix.push_back(row);
}
}

关于c++ - 在函数之间的堆上传递数组时导致此运行时错误的原因,c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15894813/

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