在创建2D和1D数组时使用malloc时出错

时间:2012-08-29 07:49:59

标签: c arrays matrix malloc

我正在创建n大小的1d数组B和T以及nxn大小的2D数组A,其中n先前已经计算过。 但是Pause之后程序崩溃了,我可能做错了什么?

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是整数。

2 个答案:

答案 0 :(得分:3)

  

nxn尺寸的2D阵列

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

A[j]=(float*)malloc(sizeof(int)*(j));
                                 ^

您希望n代替j

答案 1 :(得分:1)

永远不要在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 you shouldn't cast the return value of malloc()