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