2017-04-08 45 views
0

我試圖使用inode的陣列(結構I製造):分段故障/可變大小的對象可能不被初始化錯誤C

typedef struct iNode 
{ 
    int id; 
    int size; 
    int pointers[NUM_POINTERS]; 
} iNode; 

我得到segmentation fault在此代碼:

for (int k = 0; k < NUM_POINTERS-1; k++) { 
      root->pointers[k+1] = k+2; 
      iNode *inodes[maxiNodePerBlock]; 


      for (int i = 0 ; i<maxiNodePerBlock; i++) { 
       iNode *tmp = malloc(sizeof(iNode)); 
       tmp->id = -1; 
       tmp->size = -1; 
       for (int j= 0; j< NUM_POINTERS; j++) { 
        tmp->pointers[j] = -1; 
       } 
       strcpy(inodes[i], tmp); 
       free(tmp); 
      } 
      write_blocks(k+1, 1, inodes); 
     } 

strcpy(inodes[i], tmp);行。 所以,我試圖將其初始化:

iNode *inodes[maxiNodePerBlock] = malloc(sizeof(iNode)*maxiNodePerBlock); 

但後來我得到的錯誤:variable-sized object may not be initialized

有什麼建議?

回答

1
strcpy(inodes[i], tmp); 

當您到達上述行時,沒有爲inodes[i]分配內存。 您可以直接使用inodes[i]的內存代替tmp

for (int i = 0 ; i<maxiNodePerBlock; i++) { 
      inodes[i] = malloc(sizeof(iNode)); 
      inodes[i]->id = -1; 
      inodes[i]->size = -1; 
      for (int j= 0; j< NUM_POINTERS; j++) { 
       inodes[i]->pointers[j] = -1; 
      } 
相關問題