我正在创建n大小的1d数组B和T以及nxn大小的2D数组a,其中n已在前面计算过。但是程序在暂停后崩溃了,我可能做错了什么??
float *B = malloc(sizeof(int) * (n));
float *T = malloc(sizeof(int) * (n));
system("PAUSE");
float **A;
A = malloc(sizeof(int) * (n));
for(j = 0; j < n; j++)
{
A[j] = malloc(sizeof(int) * (j));
}
i、 j和n是整数。
nxn大小的2D阵列a
您将错误的类型传递给sizeof
。您应该使用sizeof(float)
和sizeof(float *)
。但更严重(也是更阴险)的问题是:
A[j]=(float*)malloc(sizeof(int)*(j));
^
您需要n
而不是j
。
永远不要将参数中的类型名称重复到malloc()
;这样做很容易说出错误的类型,从而产生错误。
你应该使用sizeof
,就像这样:
float *B = malloc(n * sizeof *B);
float **A = malloc(n * sizeof *A);
for(j = 0; j < n; ++j)
A[j] = malloc(n * sizeof *A[j]);
此外,在C中,您不应该强制转换malloc()
的返回值。