2016-05-06 94 views
2

我有檢查,如果指針在我的結構是空的一些問題,這是我的代碼:檢查指針爲NULL

zone* z = malloc(sizeof(zone)); 
z->cases = malloc(sizeof(Case)*300); 

for(i = 0; i < 300; i++) 
{ 
    Case* c = z->cases[i]; 

    if(c->fourmilier) // HERE IS RAISE SEGMENTATION FAULT 
    { 
     if(read(&nbTypeFourmib, sizeof(unsigned char))==-1) { 
      exit(EXIT_FAILURE); 
     } 
    } 
} 

我的結構:

typedef struct { 
    unsigned short foodSpawnfreq; 
    unsigned short foodUnit; 
    unsigned char sourceFood; 
    Case** cases; 
    TypeFourmi** TypeFourmi; 
    TypeFourmi** TypeBibibte; 
} zone; 

typedef struct{ 
    fourmiliere* fourmilier; 
    bibite* bibit; 
    fourmis* fourmi; 
    char obstacle; 
} Case; 

回答

0

您結構指定的類型caseCase**。但是,您正在爲其分配Case*

你需要做的是改變:

z->cases = malloc(sizeof(Case)*300); 

要...

z->cases = malloc(sizeof(Case*)*300); 

而你的循環內...

z->cases[i] = malloc(sizeof(Case)); 

// initialise data 

Case* c = z->cases[i]; 
+0

謝謝:)它是確定:) – pilout

+0

這將是一個簡單得多改變類型'案例**'來'Case *',並使用'Case * c =&z-> cases [i];'代替。 – user694733

+0

@ user694733是的,但很難說這個代碼的最終目標是什麼,所以我只是用直接路徑 – OMGtechy

0

試試這個

if((NULL != c) && c->fourmilier) 

我認爲你確實需要像

z->cases = new Case[300]; 

,而不是

z->cases = malloc(sizeof(Case)*300); 
+0

原來的問題看起來像C(因此爲什麼我把它標記爲這樣),並且如果是這樣的話是'新'關鍵字:) – OMGtechy

+0

我沒有注意到標籤:( – GMichael