c - 自由矩阵的动态矩阵问题

标签 c

我正在尝试从用户输入中读取矩阵维度( dim )并创建 n*n动态矩阵。 但是当我打印矩阵时,我的程序崩溃了。

我在Stackoverflow中搜索过,可能是free()错误。 我不知道为什么,但程序在 dim < 5 时运行。 .

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

        typedef struct{
            float real, img;
        }COMPLEXO;

        void zeroIt(COMPLEXO **matrix, int dim){
            int i,j;
            for(i=0;i<dim;i++){
                for(j=0;j<dim;j++){
                    matrix[i][j].real=0;
                    matrix[i][j].img=0;
                }
            }
        }

        int main(void){
            int dim, i, j;
            COMPLEXO **matrix;
            int flag = 1;
            /*Pedir Dimensao da Matrix*/
            printf("DIM: \n");
            scanf("%d", &dim);
            /*Alocar espaço*/
            matrix = (COMPLEXO **) malloc(sizeof(dim) * sizeof(COMPLEXO));
            /*Alocar linhas*/
            for(i = 0; i < dim; i++){
                matrix[i] = (COMPLEXO *) malloc(sizeof(dim) * sizeof(COMPLEXO));
            }
            if(matrix == NULL){
                printf("Erro");
                return;
            }

            /* Escrever dados */

            for(i=0;i<dim;i++){
                for(j=0;j<dim;j++){
                    matrix[i][j].real = i;
                    matrix[i][j].img = j;
                }
            }
            printf("#insert matrix - done\n\n");

            /* Imprimir dados */
            for(i=0;i<dim;i++){
                for(j=0;j<dim;j++){
                    printf("%.f|%.f ", matrix[i][j].real, matrix[i][j].img);
                }
                printf("\n");
            }

            printf("#print matrix - done \n\n");
            zeroIt(matrix, dim);
            for(i=0;i<dim;i++){
                free(matrix[i]);
            }
            free(matrix);
            printf("#free pointer - done \n\n");
            getchar();
            return 0;
        }

最佳答案

您的第一个 malloc 应该使用 sizeof(COMPLEXO*),而不是 sizeof(COMPLEXO)。您正在分配一个指针数组,而不是一个结构数组。

关于c - 自由矩阵的动态矩阵问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20130053/

相关文章:

c - 尝试按地址将数组传递给函数来对数组进行排序时出现段错误 11

c - 警告 : implicit declaration of function 'daemon'

c - 指针赋值警告

c - C 中使用分隔符分割字符串

c 指针 - 警告格式 '%x' 需要类型为 'unsigned int' 的参数

c - C 中未定义的行为

c - 使用 ALSA 从 Line IN 录制声音

c - 如何有效地将数组缩小到目标标准偏差

c - 递归获取目录的大小 - C

c - NULL 数据指针与 NULL 函数指针相同吗?