C、 打印二维动态分配数组

C、 打印二维动态分配数组,c,arrays,C,Arrays,我在打印2d阵列时遇到问题。为矩阵分配内存并用0填充后,无法打印。这是我的密码。我以前做过这件事,而且做得很好,但现在我看不出问题所在 int _tmain(int argc, _TCHAR* argv[]) { int m, n, num; float **tab1 = NULL; for (;;) { printf("\n1. Nowy budynek"); printf("\n2. Wyswietl moc pobierana w pomieszczeniach");

我在打印2d阵列时遇到问题。为矩阵分配内存并用0填充后,无法打印。这是我的密码。我以前做过这件事,而且做得很好,但现在我看不出问题所在

int _tmain(int argc, _TCHAR* argv[])
{
int m, n, num;
float **tab1 = NULL;
for (;;)
{

    printf("\n1. Nowy budynek");
    printf("\n2. Wyswietl moc pobierana w pomieszczeniach");
    printf("\n3. Wlacz swiatlo");
    printf("\n4. Wylacz swiatlo");
    printf("\n0. Exit\n");
    scanf_s("%d", &num);

    if (num == 1)
    {
        do{
            printf("Podaj liczbe kondygnacji: ");
            scanf_s("%d", &m);
        } while (m < 0);
        do{
            printf("Podaj liczbe pomieszczen: ");
            scanf_s("%d", &n);
        } while (n < 0);
        tworzenie(m, n);
    }
    for (int i = m - 1; i >= 0; i--)
    {
        for (int j = 0; j < n; j++)
        {
            printf("%10.2f", tab1[i][j]);
        }
        printf("\n");
    }
    if (num == 2)
    {
        if (tab1 == NULL)
        {
            printf("\n Brak budynku! Stworz nowy.\n");
        }
        else
        wyswietlanie(tab1, m, n); <- it crashes here.
    }
    if (num == 3)
    {
        if (tab1 == NULL)
        {
            printf("\n Brak budynku! Stworz nowy.\n");
        }
        else
            wlaczanie(tab1, m, n);
    }
    if (num == 4)
    {
        if (tab1 == NULL)
        {
            printf("\n Brak budynku! Stwórz nowy.");
        }
        //else
        //wylaczanie(tab1,m, n);
    }
    if (num == 0)
    {
        //      exit(tab1,m, n);
    }
}


return 0;
int-tmain(int-argc,_-TCHAR*argv[]
{
int m,n,num;
浮动**tab1=NULL;
对于(;;)
{
printf(“\n1.Nowy budynek”);
printf(“\n2.Wyswietl moc pobierana w pomieszczeniach”);
printf(“\n3.Wlacz swiatlo”);
printf(“\n4.Wylacz swiatlo”);
printf(“\n0.Exit\n”);
scanf_s(“%d”和&num);
如果(num==1)
{
做{
printf(“Podaj liczbe kondynagjai:”);
扫描频率(“%d”和“m”);
}m<0;
做{
printf(“Podaj liczbe pomieszczen:”);
扫描频率(“%d”和“&n”);
}n<0;
tworzenie(m,n);
}
对于(int i=m-1;i>=0;i--)
{
对于(int j=0;j
这是主要问题

if (num == 1)
{
    do{
        printf("Podaj liczbe kondygnacji: ");
        scanf_s("%d", &m);
    } while (m < 0);
    do{
        printf("Podaj liczbe pomieszczen: ");
        scanf_s("%d", &n);
    } while (n < 0);
    /* tworzenie(m, n); this is wrong, must be */
    tab1 = tworzenie(m, n);
}

不要强制转换malloc()的结果。。请参阅
void wyswietlanie(float **tab1, int m, int n)
{
for (int i = m - 1; i >= 0; i--)
{
    for (int j = 0; j < n; j++)
    {
        printf("%10.2f", tab1[i][j]);
    }
    printf("\n");
}
 }
if (num == 1)
{
    do{
        printf("Podaj liczbe kondygnacji: ");
        scanf_s("%d", &m);
    } while (m < 0);
    do{
        printf("Podaj liczbe pomieszczen: ");
        scanf_s("%d", &n);
    } while (n < 0);
    /* tworzenie(m, n); this is wrong, must be */
    tab1 = tworzenie(m, n);
}
tab1 = (float**)malloc(m * sizeof(float*));
for (int i = 0; i < n; i++)
{
    tab1[i] = (float*)malloc(n * sizeof(float));
}
tab1 = (float**)malloc(m * sizeof(float*));
for (int i = 0; i < m; i++)
{
    tab1[i] = (float*)malloc(n * sizeof(float));
}