使用malloc创建二维和一维数组时出错

使用malloc创建二维和一维数组时出错,c,arrays,matrix,malloc,C,Arrays,Matrix,Malloc,我正在创建大小为n的一维数组B和T,以及大小为nxn的二维数组a,其中n已在前面计算过。 但是程序在暂停后崩溃了,我可能做错了什么 float *B = malloc(sizeof(int) * (n)); float *T = malloc(sizeof(int) * (n)); system("PAUSE"); float **A; A = malloc(sizeof(int) * (n)

我正在创建大小为n的一维数组B和T,以及大小为nxn的二维数组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));
}
float*B=malloc(sizeof(int)*(n));
float*T=malloc(sizeof(int)*(n));
系统(“暂停”);
浮动**A;
A=malloc(sizeof(int)*(n));
对于(j=0;j
i、 j和n是整数

nxn大小的二维数组

您将错误的类型传递到
sizeof
。您应该使用
sizeof(float)
sizeof(float*)
。但更严重的(和潜在的)问题是:

A[j]=(float*)malloc(sizeof(int)*(j));
                                 ^
您想要的是
n
而不是
j

nxn大小的二维数组

您将错误的类型传递到
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]);
float*B=malloc(n*sizeof*B);
浮点数**A=malloc(n*sizeof*A);
对于(j=0;j

另外,在C.

中,切勿将参数中的类型名称重复到
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]);
float*B=malloc(n*sizeof*B);
浮点数**A=malloc(n*sizeof*A);
对于(j=0;j

此外,在C.

中还有更严重的问题:在C中强制转换
malloc()的返回值。
但是分配三角形形状如何导致崩溃?@BoPersson OP说“一个nxn大小的2D数组a”。所以这大概就是它的使用方式。更严重的问题是:在C中强制转换
malloc()
的返回值。但是分配三角形形状如何导致崩溃呢?@BoPersson OP说“一个nxn大小的2D数组a”。所以它大概就是这样被使用的。
sizeof(int)
在这里不好,它应该是
sizeof(float)
sizeof(float*)
对于
A
sizeof(int)
在这里不好,对于
A
应该是
sizeof(float)
sizeof(float*)