使用malloc时分配内存失败

时间:2013-10-07 19:34:14

标签: c

我创建了一个2D数组来模拟缓存。对于每个缓存行,我使用struct来定义它。当我想初始化cahce时,使用malloc时出了点问题。我在代码中标记了错误的位置。 谢谢!

typedef struct {
    int valid;
    int tag;
    int lruIndex;
} Line; 

Line** initCache(int s, int E){

    int i, j;
    //int setSize = sizeof(Line *);
    //int lineSize = sizeof(Line);
    /* allocate memory to cache */
    //printf("%d   %d\n", setSize, lineSize );
    Line** cache = NULL;
    cache = (Line **)malloc((1 << s) * sizeof(Line *)); //set 

    //check for memory error
    if (!cache)
    {
        printf("%s\n", "allocate memory failed 1111111");
        exit(-1);
    }

    for (i = 0; i < (1 << s); i++){
        cache[i] = (Line *)malloc(E * sizeof(Line));   <<<<<<< i think here something is wrong, cache[i] returns NULL and then print "allocate memory failed  22222222"

        //check for memory error
        if (cache[i])
        {
            printf("%s\n", "allocate memory failed  22222222");
            exit(-1);
        }

        for(j = 0; j < E; j++){
            cache[i][j].valid = 0;   //initial value of valid
            cache[i][j].lruIndex = j; //initial value of lruIndex 0 ~ E-1
        }
    }

    return cache;
}

2 个答案:

答案 0 :(得分:1)

malloc((1 << s) * sizeof(Line *)

也可以是malloc(0 * 4)!

你也可以用尽内存。

答案 1 :(得分:1)

if (cache[i])
    {
        printf("%s\n", "allocate memory failed  22222222");
        exit(-1);
    }

cache[i]时退出!= NULL,表示在分配内存时退出。

以正确的方式改变条件:

(cache[i]==NULL)

当malloc失败时,

将评估为TRUE