我实现了几个与数组和指针相关的矩阵函数,每次运行代码时都会出现分段错误。如果有人能修改我的代码并解释为什么会出现这种错误,那就太好了。
函数1应该创建一个动态分配的矩阵,其中包含相应的列和行。它还应该将元素初始化为0(我必须使用xmalloc
,但不能使用xcalloc
),并返回一个指向创建的矩阵的指针。函数2获取一个行 * 列的一维数组,并创建一个动态分配的矩阵。函数3应打印出一个矩阵。函数4应释放已创建的矩阵。
这是我的密码
struct Matrix {
int rows; // number of rows
int cols; // number of columns
double** data; // a pointer to an array of n_rows pointers to rows; a row is an array of n_cols doubles
};
typedef struct Matrix Matrix;
/**
Creates a zero-initialized matrix of rows and columns matrix.
@param[in] n_rows number of rows
@param[in] n_cols number of columns
@return a pointer to an array of n_rows pointers to rows; a row is an array of n_cols doubles
*/
Matrix* make_matrix(int n_rows, int n_cols) {
double **m = xmalloc(n_rows * sizeof(double));
for(int row = 0; row < n_cols; row++){
m[row] = xmalloc(n_cols * sizeof(double));
}
Matrix matrixx = {n_cols, n_rows, m};
Matrix *pointer;
pointer = &matrixx;
return pointer;
}
/**
Creates a zero-initialized matrix of rows and columns matrix.
@param[in] data an array of doubles, ordered row-wise
@param[in] n_rows number of rows
@param[in] n_cols number of columns
@return a pointer to an array of n_rows pointers to rows; a row is an array of n_cols doubles
*/
Matrix* copy_matrix(double* data, int n_rows, int n_cols) {
Matrix *pointer = make_matrix(n_rows,n_cols);
int k = 0;
double **Matrix = (double **)xmalloc(sizeof(double *) * n_rows);
for(int i = 0; i < n_rows; i++){
Matrix[i] = (double *)xmalloc(sizeof(double ) * n_cols);
}
do{
for(int i = 0; i < n_rows; i++){
for(int j = 0; j < n_cols; j++){
Matrix[i][j] = data[k];
k++;
}
}
}while (k < sizeof(data));
return pointer;
}
/**
@param[in] m the matrix to print
*/
void print_matrix(Matrix* m) {
for(int row = 0; row < m->rows; row++){
for(int column = 0; column < m->cols; column++){
printf("%.f ", m->data[row][column]);
}
println();
}
println();
}
//@param[in] m the matrix to free
void free_matrix(Matrix* m) {
for (int i = 0; i < m->cols; i++)
free(m->data[i]);
free(m->data);
free(m);
}
我尝试在函数1、2和4中使用xmalloc分配内存,但不知何故,这不起作用,我得到了一个分段故障错误
1条答案
按热度按时间z3yyvxxp1#
在make_matrix函数的第一行中,您可能希望只使用一个星号,因为两个星号表示指向另一个指针,而我看不到另一个指针在哪里
尝试将其从以下内容更改为:
改为:
如果这不起作用,那么告诉我,我将再次查看代码,并尝试发现另一个错误