2016-03-20 32 views
0

NODE型オブジェクトを構造体内のNODE*配列に代入する際に、現在問題が発生しています。構造体ポインタ内の構造体ポインタ配列内のインデックスに値を代入する

次のような構造が見て:

typedef struct node { 
    int pid; 
    int p; 
    int offset; 
    unsigned TAG; 
} NODE; 

typedef struct invTablePage { 
    NODE *pageTable; 
    int frameSize; 
    int currentSize; 
    int totalSize; 
    int oldest; 
    int maxIndex; 
} INV_PAGE_TABLE; 

次のようにinvTablePageが割り当てられている:

void initInverted(INV_PAGE_TABLE *invTable, int memSize, int frameSize) { 
    //Malloc inverted page table 
    invTable = malloc(sizeof(struct invTablePage)); 
    //Save frameSize 
    invTable->frameSize = frameSize; 
    //Save totalSize 
    invTable->totalSize = memSize/frameSize - 1; 
    //Save currentSize 
    invTable->currentSize = 0; 
    //Set oldest 
    invTable->oldest = 0; 
    //Malloc array inside of page table 
    invTable->pageTable = malloc(sizeof(NODE) * invTable->totalSize); 
} 

そして最後にセグメンテーションフォールトを呼び出す方法

void addToPageTable(struct invTablePage *invTable, NODE *node) { 
    NODE tempNode; 
    //If pageTable is not full 
    int currentSize = invTable->currentSize; 

    if (invTable->currentSize != invTable->totalSize) { 
     //Add Entry at index of currentSize 

     /*FOLLOWING LINE CRASHES PROGRAM*/ 
     invTable->pageTable[currentSize] = node; 

     //Update currentSize 
     invTable->currentSize++; 
     //If pageTable is full 
    } else { 
     //Set temp to oldest 
     tempNode = invTable->pageTable[invTable->oldest]; 
     //Set oldest to node 
     invTable->pageTable[invTable->oldest] = *node; 
    } 
} 
+0

'invTable-> pageTable [currentSize] = node;'、あなたは 'invTable-> pageTable [currentSize] = * node;'を意味していますか? –

答えて

0

お知らせことを、例えば、配列[10]では、インデックスは0から9まで続く。

したがって、合計サイズはinvTable-> totalSize = memSize/frameSizeである必要があります。 そしてcurrentSizeは超えるべきではありませんinvTable-> totalSize - 1 ...

私は私の答えが正しいか分からない、してみてください - しかし、私はあなたがmemSizeの/フレームサイズを割り当てる必要が及び/フレームサイズmemSizeのではないと思う1. いくつかのprintfは...

+0

いいえサイコロ、ありがとうとにかく –

関連する問題