当我尝试运行该程序时,我遇到了执行问题,它只是简单地动态分配具有所选值的多维数组,并将其设置为零。它可以正确编译,但无法执行。

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

    int main(void) {
        int **tab;
        int ligne;
        int col;
        printf("saisir le nbre de lignes volous\n");
        scanf("%d", &ligne);
        printf("saisir le nbre de colonnes volous\n");
        scanf("%d", &col);
        tab = (int**)malloc(ligne*sizeof(int*));
        int i ,j;
        for (i=0 ; i < ligne; i++) {
            *(tab+i) = (int*)malloc(col*sizeof(int));
        }
        for (i = 0; i < ligne; i++) {
            for (j = 0; j < col; j++) {
                **(tab + i+ j) = 0;
            }
        }
        for (i = 0; i < ligne; i++) {
            for (j = 0; j < col; j++) {
                printf("%d\t", **(tab + i +j));
            }
            printf("\n");
        }
        free(tab);
        return 0;
    }


谢谢。

最佳答案

使用简单的[row][col]访问双指针。它更具可读性,并且可以避免编码时出现错误。

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

int main(void) {
    int **tab;
    int ligne;
    int col;
    printf("saisir le nbre de lignes volous\n");
    scanf("%d", &ligne);
    printf("saisir le nbre de colonnes volous\n");
    scanf("%d", &col);

    tab = malloc(ligne*sizeof(int*));

    if (tab != NULL)
    {
        int i ,j;
        for (i=0 ; i < ligne; i++)
        {
            tab[i] = malloc(col*sizeof(int));
            if (tab[i] == NULL)
            {
                fprintf(stderr, "Malloc failed\n");
                return 1;
            }

        }
        int k=0;
        for (i = 0; i < ligne; i++) {
            for (j = 0; j < col; j++) {
                tab[i][j] = k++;
            }
        }
        for (i = 0; i < ligne; i++) {
            for (j = 0; j < col; j++) {
                printf("%d\t", tab[i][j]);
            }
            free(tab[i]);
            printf("\n");
        }
    }
    free(tab);
    return 0;
}

09-05 05:48