malloc'ing内存后初始化C数组

时间:2015-09-17 07:15:45

标签: c syntax malloc

我需要在为其动态分配内存后在C中初始化2D数组。我按如下方式分配内存:

double **transition_mat = (double **) malloc(SPACE_SIZE * sizeof(double *));

for (int i = 0; i < SPACE_SIZE; i++) {
    transition_mat[i] = (double *) malloc(SPACE_SIZE * sizeof(double));
}

然后我想将它初始化为某个2D数组,类似于在堆栈中存储数组时可以进行初始化的方式:

double arr[2][2] = {{1.0, 7.0}, {4.1, 2.9}};

但是,在第一个代码段中分配内存后,尝试按如下方式进行分配会产生错误:

transition_mat = (double **) {{1.0, 7.0}, {4.1, 2.9}};

有没有人知道在malloc内存之后初始化数组的一种干净方法?

注意:有人建议我循环遍历0 <= i < SPACE_SIZE0 <= j < SPACE_SIZE并按此方式分配值。问题在于,不能简单地从ij计算条目,因此代码最终看起来不比任何暴力方法更清晰。

1 个答案:

答案 0 :(得分:3)

如果您要在代码中将所有数据作为文字(进行初始化),那么为什么不将它作为一个显式的2D数组存储开始,并完成?

最坏的情况是,从现有阵列进行动态分配和复制。

在函数内部或全局范围内设置static const,具体取决于您需要的访问模式。