C中的灵活阵列大小

时间:2011-05-27 15:58:13

标签: c

我在C编码MCMC算法,我有一点问题。该算法的思想是推断群体中的群体数量。那么让我们说我们从k组开始。其中k的第一个值由用户给出或随机选择。现在,在算法的每个步骤中,k可以减1,增加1或保持不变。我为每个组都有一些变量;

double *mu;
double *lambda;
double **A

mu和lambda确实是k个元素的数组,A是kxN的二维数组。 N也在每次迭代时发生变化。我有一些数据y1,y2,...,yn所以在每次迭代我做一些处理,为参数提出新值并决定是否移动k。

到目前为止,我已经绑定使用malloc和realloc来处理我的参数维度的所有这些变化,但是我必须迭代这个算法让我们说100,000次,所以在某些时候它会崩溃。如果我在第三次迭代中以k = 10开始!

所以有两个问题:

  • 我可以在每次迭代时使用realloc吗?或者这是我的大错。如果是,我想我应该检查我的代码!
  • 如果不是我该怎么办,有什么建议吗?

1 个答案:

答案 0 :(得分:4)

我会考虑在每次迭代时更改存储空间。 realloc带来了相当大的开销(在最坏的情况下,它必须每次都复制整个数组)。

您可以在启动时简单地分配最大尺寸,然后只使用更少的尺寸吗?或者至少,只有{em}增加存储要求realloc才能增加容量(从而模仿std::vector的运作方式)。

[顺便说一下,我不知道为什么你的应用程序崩溃了,因为你没有给我们任何细节(例如你得到的错误信息,或你通过调试找到的。但我猜你某处有错误!]