【发布时间】:2016-04-19 04:26:56
【问题描述】:
我有一个相当大的程序,需要我使用指向二维数组的指针。我很难为数组分配空间。
我已经尝试在声明时分配空间,但我遇到了一百万个路障。
我在这里找到了代码:Create a pointer to two-dimensional array
我有一个指向数组other_arrays的指针的二维数组
我有这个:
static double other_arrays[51][1];
double (*SumH)[51][1] = &other_arrays;
double (*WeightIH)[51][1] = &other_arrays;
double (*Hidden)[51][1] = &other_arrays;
double (*SumO)[51][1] = &other_arrays;
double (*WeightHO)[51][1] = &other_arrays;
double (*Output)[51][1] = &other_arrays;
double (*DeltaWeightIH)[51][1] = &other_arrays;
double (*DeltaWeightHO)[51][1] = &other_arrays;
for (i = 0; i < 2; i++){
for (j = 0; j < 51; j++){
SumH[j][i] = (double *)malloc(sizeof(double));
WeightIH[j][i] = (double *)malloc(sizeof(double));
Hidden[j][i] = (double *)malloc(sizeof(double));
SumO[j][i] = (double *)malloc(sizeof(double));
WeightHO[j][i] = (double *)malloc(sizeof(double));
Output[j][i] = (double *)malloc(sizeof(double));
DeltaWeightIH[j][i] = (double *)malloc(sizeof(double));
DeltaWeightHO[j][i] = (double *)malloc(sizeof(double));
}
}
当我编译时,我得到:error: array type 'double [1]' is not assignable
我尝试了一些我在网上找到的东西,例如SumH[j] = (double *)malloc(sizeof(double));
然后我得到:error: array type 'double [51][1]' is not assignable
或者类似的东西会产生同样的错误:
for (j = 0; j < 51; j++){
SumH[j] = (double *)malloc(sizeof(double));
WeightIH[j] = (double *)malloc(sizeof(double));
Hidden[j] = (double *)malloc(sizeof(double));
SumO[j] = (double *)malloc(sizeof(double));
WeightHO[j] = (double *)malloc(sizeof(double));
Output[j] = (double *)malloc(sizeof(double));
DeltaWeightIH[j] = (double *)malloc(sizeof(double));
DeltaWeightHO[j] = (double *)malloc(sizeof(double));
}
解决方案
我没有投malloc
*SumH[j][i] = *(double *)malloc(sizeof(double));
【问题讨论】:
-
不要将
malloc()转换为目标类型。 -
@iharob 我在 3D 分配时遇到总线错误
*Input[i][j][k] = *(double *)malloc(sizeof(double));i = 20 j = 2 k = 51 -
@iharob 这可能是 SO 中 c 标记问题被引用次数最多的句子。然而,常识是,这是一个风格问题。坚持强制转换 malloc() 的返回值是一件坏事[tm] 在我看来有点太教条了。
-
你是想得到一个指针数组还是指向数组的指针?
-
你的外循环范围是 0-1,但你的第二维是 1 而不是 2。为什么是 1,顺便说一句?
标签: c arrays pointers malloc allocation