我相信我的声明不正确。我有一个2D数组和一个3D数组。因为我将值0 - 或NULL
分配给其中一个数组,所以我会发生故障。我知道这是在尝试将地址NULL
分配给无效的指针。
也许我需要在分配之前取消引用数组?如果是这样,我该怎么做?如果没有,我如何声明数组?
double **WeightIH = calloc(51*20,sizeof(double **));
double ***Input = calloc(51*40, sizeof(double ***));
DeltaWeightIH[i][j] = 0.0 ;
答案 0 :(得分:0)
定义5x6x7矩阵的简单方法希望它有所帮助。
float ***array3D;
array3D = malloc(5 * sizeof(float**));
for ( int i = 0; i < 5; ++i) {
array3D[i] = malloc(6 * sizeof(float*));
for ( int j = 0; j < 6; ++j) {
array3D[i][j] = calloc( 7, sizeof(float));
for ( int k = 0; k < 7; ++k )
array3D[i][j][k] = 1.0;
}
}
在定义指针数组时我不会使用calloc,因为你在同一个循环中立即填充它们。 不要忘记自由,它会很快地吃掉你的记忆。
答案 1 :(得分:0)
最简单的方法是使用for循环。就像下面的例子一样
SELECT @ColumnNames = COALESCE(@ColumnNames + ',','') + QUOTENAME([Measure1])
FROM (SELECT DISTINCT
CASE WHEN [measure1] LIKE '%lower%' THEN 'Lower'
WHEN [measure1] LIKE '%upper%' THEN 'Upper'
WHEN [measure1] LIKE '%Days%' THEN 'Days'
WHEN [measure1] LIKE '%Occur%' THEN 'Occurrences'
WHEN [measure1] LIKE '%Pred%' THEN 'Predicted'
WHEN [measure1] LIKE '%Ratio%' THEN 'Ratio'
END AS [Measure1]
FROM [dbo].[Table1]
) t
WHERE [Measure1] IS NOT NULL
答案 2 :(得分:0)
从您的问题中不清楚连续阵列是否满足您的要求;但如果确实如此,那么你可以写得更简单:
double (*a)[20] = malloc( 51 * sizeof *a );
double (*b)[20][30] = malloc( 10 * sizeof *b );
最里面的尺寸位于右侧,其他尺寸位于左侧。
如果确实需要锯齿状数组,则需要为每一行编写单独的分配。