我正在尝试制作用于转换矩阵的函数。
在这里,我创建了一个矩阵,将其传递给我的函数,得到";分段故障";在20号线,但我不明白为什么,请帮忙。我(几乎(确信我不会从分配的内存中取出,并且我将矩阵作为"传递;int***";。。。为了简单起见,这里没有内存空闲和输出。
此外,我将很高兴有任何关于此代码的评论和提示。
#include <stdlib.h>
void transpose(int ***matrix, int *n, int *m) {
// create additional matrix
int **new_matrix = malloc(sizeof(int *) * (*m));
for (int i = 0; i < *m; i++)
new_matrix[i] = malloc(sizeof(int) * (*n));
// store data in new matrix tranposing it
for (int i = 0; i < *m; i++)
for (int j = 0; j < *n; j++)
new_matrix[i][j] = (*matrix)[j][i];
// realloc initial matrix to fit transposed matrix
for (int i = 0; i < *m; i++)
(*matrix)[i] = realloc(*matrix, sizeof(int) * (*n));
*matrix = realloc(*matrix, sizeof(int *) * (*m));
// trying to write data from new array to initial
for (int i = 0; i < *m; i++)
for (int j = 0; j < *n; j++)
// got segmentation fault here:
(*matrix)[i][j] = new_matrix[i][j];
}
int main() {
// create array: 0 1 2
// 3 4 5
int n = 2, m = 3;
int **matrix = malloc(sizeof(int *) * n);
for (int i = 0; i < n; i++)
matrix[i] = malloc(sizeof(int) * m);
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
matrix[i][j] = i * m + j;
// trying to transpose:
transpose(&matrix, &n, &m);
return 0;
}
(*matrix)[i] = realloc(*matrix, sizeof(int) * (*n));
没有任何意义,您需要执行(*matrix)[i]
。
此外,此代码的效率非常低。请查看"正确分配多维数组"。