以下代码由解析的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];
}
}
}
答案 0 :(得分:1)
要在不更改SIZE参数的情况下克服分段错误,当大小可能很大时,您需要重新设计数据结构。
例如,您可以将这个庞大的数组放在一个临时文件中,在此文件中将部件交换到主内存中。您可能还需要两级寻址,因为您必须确保可以在磁盘上寻址阵列(45TB大于可用地址空间并且可能大于最大的int)。
最好的可能是再次审查要求,看看他们是否真的需要这么大的阵列,或者是否允许其他方法来实现他们的目标。