我创建了一个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;
}
答案 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)
将评估为TRUE
。