0

我正在创建 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 是整数。

4

2 回答 2

3

一个 nxn 大小的二维数组 A

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

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

你想要n而不是j.

于 2012-08-29T07:52:07.853 回答
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 中,您不应强制转换malloc().

于 2012-08-29T07:55:11.197 回答