c - 排列矩阵?

标签 c arrays pointers struct permutation

所以我有一个矩阵结构,我必须填充 N 列中从 0~nr_vals 范围内的排列。我完成了排列部分,但我无法找出数组的指针。任何帮助,将不胜感激。我调用了一个打印函数,我所做的一切都会打印出来,仅此而已。 它应该在将排列分配给矩阵后打印排列(完成)。我做错了什么以及如何释放矩阵?

打印功能:

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);
}

最佳答案

这是部分答案:

分配matrix后,您必须分配matrix->data_arr

假设数组有 NxN 大:

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);

关于c - 排列矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40197078/

相关文章:

c - Malloc 指针数组错误

c++ - 带有 void * 指针的 Typedef 函数

c++ - 简化这个表达式

python / NumPy : Setting values to index ranges

c - 如何将每个数字扫描到数组槽中?

c - 添加多个患者 C 指针

c++ - 交换指针后删除动态分配的内存

c - 为什么我们要在通过 free() 释放内存后使指针无效?

c - 有符号与无符号比较

Java:对字节子数组的引用