由于C中的大型2D阵列导致的分段错误

时间:2018-03-19 15:00:45

标签: c arrays memory memory-management

以下代码由解析的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];    
      }
    }
}

1 个答案:

答案 0 :(得分:1)

要在不更改SIZE参数的情况下克服分段错误,当大小可能很大时,您需要重新设计数据结构。

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

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