簡體   English   中英

另一個Struct內部的嵌套結構數組

[英]Nested Array of Structs inside another Struct

我正在嘗試對緩存模擬器進行建模,因為我已經設置了所有邏輯,所以我沒有發布所有代碼,但是我正在嘗試使用結構來完成手頭的任務。

我有兩種類型的結構,一種是行,其中包含:

int LineIndex無符號長標記位int vbit

然后,我有一個結構集,其中包含:

int LRU int SetIndex行* SetLines

現在,我將其描繪為二維數組。 我做了一個變量Cache,它是一個指向Set的指針。 代碼在下面.....

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中執行第一個打印語句,但不會執行第二個打印語句。 我試圖弄清楚是否無法正確訪問每一行。 任何幫助深表感謝。

謝謝

您的程序取決於命令行參數的順序。

需要-E來設置全局變量'E'。 但是-s將調用MallocAndInitialize讀取E。

這不是您代碼的良好組織。

我建議將MallocAndInitialize移出處理參數的循環。

我看不到有任何保證,當調用MallocandInitialize時, 為E分配一個特定的值。

您確定E大於零嗎?

請在進入內部循環之前嘗試打印它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM