首页 > 解决方案 > C不打印二维动态数组内容

问题描述

我正在尝试制作一个计算 4 或 9 个数字的行列式的二维动态数组。

虽然使用指针和动态数组在一维数组中完美地工作,但我无法理解我必须做什么才能使其在二维中运行。到目前为止,程序可以正确编译并接收输入。但是,它不打印任何内容。我什至尝试打印单个单元格内容。没有什么。

这是代码:

  #include <stdio.h>
    #include <stdlib.h>
    
    int size; int i; int j; int **arDet; int a; int b; int c; int d; int e; int f; int g; int h;
    
    int input()
    {
        do
        {
            scanf("%d", &size);
        }while(size > 3 || size < 2);
        arDet = (int**)malloc(sizeof(int)*size);
        for(i = 0 ; i < size; i++)
        {
            for(j = 0 ; j < size; j++)
            {
                scanf("%d", &arDet[i][j]);
            }
        }
    }
    
    int main()
    {
        input();
        if(size == 2)
        {
            printf("%d\n", arDet[0][0]*arDet[1][1] - arDet[0][1]*arDet[1][0]); 
            return 0;
        }else if(size == 3)
        {
           // printf("%d", arDet[0]*(arDet[4]*arDet[8] - arDet[7]*arDet[5]) - arDet[1]*(arDet[3]*arDet[8] - arDet[5]*arDet[6]) + arDet[2]*(arDet[3]*arDet[7] - arDet[6]*arDet[4]));
            return 0;
        }else
        {
            return -1;
        }
    }

标签: arrayscprintingdynamic-arrays

解决方案


  • 您只分配了一个数组来存储指向每一行的指针。您必须分配数组来存储每行的值。
  • 的尺寸计算arDet是错误的。的元素arDetint*int在某些环境中(例如 4 个字节)的大小比int*(例如 8 个字节)短,您的代码会在这种环境中造成问题。
  • 不鼓励malloc()在 C 中转换结果。
    arDet = malloc(sizeof(arDet[0])*size); /* fix size calculation */
    for(i = 0 ; i < size; i++)
    {
        arDet[i] = malloc(sizeof(arDet[i][0]) * size); /* add this */
        for(j = 0 ; j < size; j++)
        {
            scanf("%d", &arDet[i][j]);
        }
    }

另请注意,注释行

       // printf("%d", arDet[0]*(arDet[4]*arDet[8] - arDet[7]*arDet[5]) - arDet[1]*(arDet[3]*arDet[8] - arDet[5]*arDet[6]) + arDet[2]*(arDet[3]*arDet[7] - arDet[6]*arDet[4]));

没有意义,因为 C 不支持将两个指针相乘,并且大于 2 的索引在 3 时超出范围size


推荐阅读