我的问题很简单.
我正在构建一个小程序来使用马尔可夫链分析和模拟随机文本.我的第一个MC有大小为2的内存,使用字母{a,b,...,z}.因此,我的转换矩阵大小为26*26*26.
但现在,我想使用内存大小为4的MC来增强我的模拟.因此,我需要将转换概率存储在大小为26*26*26*26*26的5D数组中.
问题是(我相信),C不允许我声明和操纵这样的数组,因为它可能太大了.事实上,我在编写时遇到了分段错误11提示:
int count [26] [26] [26] [26] [26]
有没有办法解决这个限制?
谢谢!
在具有32位整数的典型PC体系结构中,int count[26][26][26][26][26]创建一个大小为47525504字节,47MB的对象,这在大多数当前计算机上是可管理的,但可能对于自动分配而言太大(也就是在堆栈上).
您可以声明count为全局变量或静态变量,也可以从堆中分配它并count使用此声明创建指针:
int (*count)[26][26][26][26] = calloc(sizeof(*count), 26);
if (count == NULL) {
/* handle allocation failure gracefully */
fprintf(stderr, "cannot allocate memory for 5D array\n");
exit(1);
}
Run Code Online (Sandbox Code Playgroud)