我正在编写一个需要使用一些非常大的数组的C程序。我通过调用:
为我的数组分配内存unsigned long *visited = declareArrayofLongs(my_pow(2, d));
declareArrayofLongs()
功能是:
unsigned long int* declareArrayofLongs(unsigned long int length)
{
unsigned long int *myarray = (unsigned long int*) malloc(length*sizeof(unsigned long int));
if (myarray==NULL)
printf("Error allocating memory for unsigned longs!\n");
unsigned long int i;
for(i=0; i<length; i++)
myarray[i] = 0;
return myarray;
}
my_pow()
是
unsigned long int my_pow(int base, int exp)
{
unsigned long int pow=1;
int i=0;
for(i=0; i<exp; i++){
pow = (unsigned long int)base*pow;
}
return pow;
}
当程序运行并且达到d = 29左右时,我得到&#34;错误为无符号长号分配内存!&#34;。我的系统上有16GB的RAM。难道我不能处理这个数量的分配吗?
一次只声明一个visited
数组。在重新分配之前,我有一个free(visited)
电话。
答案 0 :(得分:1)
你没有展示my_pow。既然你的代码不起作用,那么是什么让你认为它能做到你认为它的作用呢?
您可能正在运行32位代码,在这种情况下,无论RAM多少,您都不会获得超过3GB的代码。