【发布时间】:2018-08-28 04:38:15
【问题描述】:
下面的代码是由解析的 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];
}
}
}
【问题讨论】:
-
我的编译器甚至不让这段代码编译。
-
分段错误可能是@ArthurDent的原因
-
考虑到双倍的 8 个字节,你分配
8*2512555*2512555 = 50503 GB你的机器支持吗 -
我认为我对数组的分配完全错误,我想我的问题应该是现在。我如何将 2512555 分配到二维数组中,而不是原来的 8*2512555*2512555 = 50503 GB
-
@Jason 据我所知,这是不可能的 2512225,你需要有完美的平方值,在你的情况下 2512225 更接近 2512555 和一个完美的平方,你可以使用
double temp[1585][1585]
标签: c arrays memory memory-management