以下代码是由已解析的SIZE参数生成的,在这种情况下,您看到“ 2512555”的任何地方都是已解析的SIZE参数。我遇到的问题是数组太大,导致分段错误。

有没有一种方法可以克服细分错误而无需更改SIZE参数?此参数的范围为0-400,000。

#include <stdio.h>
#include <stdlib.h>

double templ25_mem1[2512555][2512555];

int main()
{
  int templ25_mem1_index1=0;
  int templ25_mem1_index2=0;

    for(templ25_mem1_index1; templ25_mem1_index1 < 2512555; templ25_mem1_index1++)
    {
      for(templ25_mem1_index2; templ25_mem1_index2 < 2512555; templ25_mem1_index2++)
      {
            int rndRow = rand() % 2512555;
            int rndCol = rand() % 2512555;

            templ25_mem1[rndRow][rndCol] = 0x7FFFFFFF;
            templ25_mem1[rndRow][rndCol];
      }
    }
}

最佳答案

为了克服分段错误而不更改SIZE参数,当大小可以那么大时,您需要重新设计数据结构。

对于erxample,您可以将这个巨大的数组放在一个临时文件中,在其中将零件交换到主内存中。您可能还需要两级寻址,因为必须确保可以对磁盘上的阵列进行寻址(45TB大于可用地址空间,并且可能大于最大int)。

最好的办法是再次检查需求,看看它们是否真的需要这么大的阵列,或者是否允许其他方法实现其目标。

10-07 18:58