错误分配内存后初始化 C 数组



我需要在动态分配内存后在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'ing内存?

注意:有人建议我循环0 <= i < SPACE_SIZE0 <= j < SPACE_SIZE并以这种方式赋值。这样做的问题是不能简单地从ij中计算条目,因此代码最终看起来并不比任何暴力破解方法干净。

如果要在代码中使用所有数据作为文字(进行初始化),为什么不直接将其存储为显式的2D数组来开始,然后完成呢?

最坏的情况是,动态分配并从现有数组中复制。

根据您需要的访问模式,在函数内或全局范围内设置为static const

相关内容

  • 没有找到相关文章

最新更新