为什么这种动态分配没有';行不通 inta=0; int b=0; scanf(“%d%d”、&a和&b); int**p=NULL; p=(int**)malloc(sizeof(int*)*a); for(int k=0;k

为什么这种动态分配没有';行不通 inta=0; int b=0; scanf(“%d%d”、&a和&b); int**p=NULL; p=(int**)malloc(sizeof(int*)*a); for(int k=0;k,c,dynamic,dynamic-memory-allocation,C,Dynamic,Dynamic Memory Allocation,当我为a和b输入4 3时,程序无法正常运行。 编码新手迭代计数错误。使用a 代码也整理好了 int a = 0; int b = 0; scanf("%d %d", &a, &b); int** p = NULL; p = (int**)malloc(sizeof(int*) * a); for (int k = 0; k < b; k++) { p[k] = (int*)malloc(sizeof(int) * b); } p[3][0]

当我为
a
b
输入4 3时,程序无法正常运行。

编码新手

迭代计数错误。使用
a

代码也整理好了

int a = 0;
int b = 0;

scanf("%d %d", &a, &b);

int** p = NULL;
p = (int**)malloc(sizeof(int*) * a);
for (int k = 0; k < b; k++)
{
    p[k] = (int*)malloc(sizeof(int) * b);
}

p[3][0] = 3;
p=malloc(sizeof*p*a);
//for(int k=0;k

健壮的代码也会检查分配是否成功(未显示)。

说“运行不正常”没有多大帮助,因为我们完全不知道程序应该做什么。我认为
for
循环中的条件应该是
k
,而不是
k
,因为
p
指向一个数组,数组中有
a
元素的空间。
p[3][0]=3现在该怎么办?
p = malloc(sizeof *p * a);

// for (int k = 0; k < b; k++)
for (int k = 0; k < a; k++) {
  p[k] = malloc(sizeof p[k][0] * b);
}