结构中的动态矩阵,C编程

时间:2016-07-26 16:51:52

标签: c matrix dynamic struct

我需要帮助。我想学习如何创建和使用动态矩阵,这是结构的元素,我想用零填充矩阵(0)并打印出来,我尝试了很多方法,但没有运气。这是代码

#include <stdio.h>
#include <stdlib.h>

typedef struct matrica
{
    int **mat;
    int dim; //this is dimension of squared matrix

}MATRICA;

void form_matrix(MATRICA *matrica);

int main()
{

    MATRICA matrix;

    form_matrix(&matrix);


    return 0;
}

void form_matrix(MATRICA *matrica)
{
    int i, j;
    MATRICA *br;

    do
    {
        printf("Size of matrix ");
        scanf("%d", &br->dim);

    }while(br->dim < 4 || br->dim > 6);

    matrica->mat = (int **) calloc(br->dim, sizeof(int *));

    for(i = 0; i < br->dim; i++)
    {
        matrica->mat[i] = (int *) calloc(br->dim, sizeof(int));

        for(j = 0; j < br->dim; j++)
        {
            matrica->mat[i][j] = 0;
        }
    }

    for(i = 0; i < br->dim; i++)
        for(j = 0; j < br->dim; j++)
            printf("%d ", matrica->mat[i][j]);

}

我做错了什么,我的循环内部函数只进行一次,有人可以向我解释原因吗?

1 个答案:

答案 0 :(得分:1)

您的程序显示未定义的行为,因为您正在取消引用未初始化的指针br。您不需要它,只需要一个变量来存储维度输入。

int i, j, dim;

do
{
    printf("Size of matrix ");
    if (scanf("%d", &dim) != 1) {
        printf("scan failed\n");
        exit(EXIT_FAILURE);
    }

}while(dim < 4 || dim > 6);

matrica->dim = dim;
/* ... replace all instances of br->dim with dim */