C 另一个结构中的嵌套结构数组

C 另一个结构中的嵌套结构数组,c,arrays,struct,nested,C,Arrays,Struct,Nested,我正在尝试建立一个缓存模拟器的模型,我没有发布所有的代码,因为我已经设置了所有的逻辑,但我正在尝试使用结构来完成手头的任务 我有两种类型的结构,一种用于行,其中包含: 整数行索引 无符号长标记位 int vbit 然后,我有一个结构集,其中包含: 内部LRU 整数集索引 行*设置行 现在我把它想象成一个二维数组。我制作了一个变量缓存,它是指向集合的指针。代码如下 typedef struct{ int Vbit; unsigned long LineTagBits; in

我正在尝试建立一个缓存模拟器的模型,我没有发布所有的代码,因为我已经设置了所有的逻辑,但我正在尝试使用结构来完成手头的任务

我有两种类型的结构,一种用于行,其中包含:

整数行索引 无符号长标记位 int vbit

然后,我有一个结构集,其中包含:

内部LRU 整数集索引 行*设置行

现在我把它想象成一个二维数组。我制作了一个变量缓存,它是指向集合的指针。代码如下

typedef struct{
    int Vbit;
    unsigned long LineTagBits;
    int LineIndex;
}Line;

typedef struct{
    Line* SetLines;
    int LRU;
    int SetIndex;
}Set;

int s, b, E, SetNum, BlockNum, i, c = 0;
unsigned long SetMask, BlockMask,TagMaks = 0;
Set* Cache = NULL;
Line* SetLines = NULL;


void MallocAndInitialize(){
    Set Cache[SetNum];
    for (int i = 0; i < SetNum; i++){
        Cache[i].LRU = 0;//set LRU line
        Cache[i].SetIndex = i;//set set INDEX
        printf("You are at Set %i \n", Cache[i].SetIndex);
        Cache[i].SetLines = (Line *)malloc(E * sizeof(Line));
        for (int j = 0; j < E; j++){
            Cache[i].SetLines[j].Vbit = 0;
            Cache[i].SetLines[j].LineIndex = j;
            Cache[i].SetLines[j].LineTagBits = 0;
            printf("Set %i, Line %i\n", Cache[i].SetIndex, Cache[i].SetLines[j].LineIndex);
            }
        }
}


int main(int argc, char *argv[]){


    while ((c = getopt(argc, argv, "s:E:b:")) != -1)
{
        switch (c){
        case's':
          s = atoi(optarg);
          SetNum = 1 << s;
          MallocAndInitialize();
          break;
        case'E':
          E = atoi (optarg);
          break;
        case 'b':
          b = atoi (optarg);
          BlockNum = 1 << b;
          break;
        default:
          printf("Error!");
          exit(1);
        }
    }

    //printSummary(0, 0, 0);
    free(Cache);
    return 0;
}
现在的问题是它将在MallocandInitialize中执行第一个print语句,但不会执行第二个print语句。我试图弄清楚我是否没有正确地访问每一行。非常感谢您的帮助


谢谢

您的程序取决于命令行参数的顺序

-需要E来设置全局变量“E”。但是-s将调用MallocAndInitialize 上面写着E

这不是一个很好的代码组织


我建议将MallocAndInitialize移出处理参数的循环。

我看不到任何保证,当调用MallocAndInitialize时,E被指定了一个特定的值

你确定E大于零吗


在进入内部循环之前,请尝试打印它。

当问题发生时,如果在进入第二个for循环之前打印出E的值,是否看到E>0?我刚刚在Set Index print语句之后添加了一个print语句,以获取显示E的值,它是0,但它不应该是…建议?在调用MallocAndInitialize之前是否初始化了E?请注意命令行参数的顺序。在你调用MallocAndInitialize之前,确保E有一个值。是的,我刚刚意识到…我觉得自己像个白痴,因为我已经花了几个小时试图弄清楚它。谢谢你们俩的帮助!领先你一步..谢谢你的投入!我像个傻瓜一样调试了好几个小时。