在C中分配无符号long的内存时出错

时间:2014-12-22 15:28:53

标签: c malloc

我正在编写一个需要使用一些非常大的数组的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)电话。

1 个答案:

答案 0 :(得分:1)

你没有展示my_pow。既然你的代码不起作用,那么是什么让你认为它能做到你认为它的作用呢?

您可能正在运行32位代码,在这种情况下,无论RAM多少,您都不会获得超过3GB的代码。