所以我有一个矩阵结构,我必须填充N列中0~nr_vals的排列。我完成了排列部分,但我无法弄清楚数组的指针。任何帮助,将不胜感激。有一个我打电话的打印功能,所有我打印的功能就是这样。 它应该在将它们分配给矩阵后打印排列(DONE)。我做错了什么,以及如何释放矩阵?
打印功能:
void print_2D(matrix_ptr mat);
struct matrix_2D_struct {
int** data_arr;
int rows;
int cols;
};
typedef struct matrix_2D_struct * matrix_ptr;
matrix_ptr perm_rec_2(int N, int nr_vals) {
struct matrix_2D_struct *matrix = malloc(sizeof *matrix);
int j = 0;
int i = 0;
prem_rec_helpTwoForMatrix (N, nr_vals, i, matrix->data_arr, j);
return NULL;
}
void prem_rec_helpTwoForMatrix(int N, int nr_vals, int i, int **a[], int j)
{
i = N - 1;
while(a[i][j] < nr_vals){
a[i][j]++;
}
while(i >= 0 && a[i][j] == nr_vals){
i--;
}
if(i < 0)
{
return;
}
a[i][j]++;
while(++i < N)
{
a[i] = 0;
}
prem_rec_helpTwoForMatrix(N, nr_vals, i, **a, j);
}
答案 0 :(得分:1)
这是部分答案:
分配matrix
后,您必须分配matrix->data_arr
。
假设数组为N
x N
大:
struct matrix_2D_struct *matrix = malloc(sizeof *matrix);
if (N < 1)
{
printf("error!\n");
return ...
}
matrix->data_arr = malloc(N*sizeof(int*));
int i, j;
for (i = 0; i < N; i++)
matrix->data_arr[i] = malloc(N*sizeof(int));
初始化(如评论中所示)
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
matrix->data_arr[i][j] = 0;
现在您可以测试它是否有效:
matrix->data_arr[2][0] = 20;
matrix->data_arr[0][4] = 4;
printf("%d\n", matrix->data_arr[2][0]);
printf("%d\n", matrix->data_arr[0][4]);
当您不再需要数据时,您可以释放它(退出程序时会自动释放数据)
for (i = 0; i < N; i++)
free(matrix->data_arr[i]);
free(matrix->data_arr);
free(matrix);