我运行在程序的问题,我不知道如何解决它。我正在处理一个文件,为此我使用ftell获得大小并将其存储在M_size中。之后,我用N声明一个无符号的char指针数组。然后在两个函数a()和b()中使用该数组。C中的分段错误,同时声明大指针数组
...
unsigned long N = (M_size/ x);
int LstElemSize = M_size % x;
if(LstElemSize != 0){
N += 1;
}
unsigned char *ptr_M[N]
a(ptr_M)
b(ptr_M)
...
函数A()实际上初始化ptr_M的每个元件在一个for循环:
a(){
int i;
for(i = 0; i < N-1; i ++){
ptr_M[i] = malloc(sizeof(unsigned char) * x);
}
}
函数B()迭代然后在每个元件,并且计算的东西,并在端部的每个元素被释放。
我现在的问题是,当我尝试处理文件例如1 GB的数组大小将在4 000 000左右,并出现分段错误(在我声明我的数组)。如果我正确计算出它是8字节(字符指针)乘以4 000 000 = 32 MB。运行该程序的服务器有足够的内存来保存该文件,但我想Response 1中提到的堆栈空间不够。
我能做些什么来解决我的问题?增加我的堆栈空间?谢谢!
你试图在堆栈上创建一个32MB的数组?堆栈通常在单位数字的MB范围内,在使用VC++的Windows上,默认值仅为1MB。 – 2014-09-26 18:23:26