2013-11-22 77 views
-1

這是我的代碼:爲什麼我會遇到分段錯誤?

struct bacchetta { 
    bool in_uso; 
}; 

int main() 
{ 
    key_t key; 
    if ((key = ftok(".", 'a')) == -1) { 
    perror("ftok"); 
    exit(1); 
    } 

    int shmid; 
    if ((shmid = semget(key, sizeof(struct bacchetta)*5, 0600 | IPC_CREAT)) == -1) { 
    perror("Errore creazione dell'area di memoria per le bacchette"); 
    exit(1); 
    } 

    bacchetta *bacchette = (bacchetta*)shmat(shmid, NULL, 0); 
    if (bacchette == NULL) { 
    perror("Errore nell'attachment dell'area di memoria"); 
    exit(2); 
    } 

    //!!!HERE segmentation-fault (core dumped) 
    if (!bacchette[0].in_uso) printf("ok");// = false; 

    return 0 
} 
+4

你正在運行它的調試器說....? – WhozCraig

回答

3

你需要調用shmget,不semget

+0

哈哈。正確。謝謝 –

+3

並且shmat在錯誤時返回-1。 – Duck

相關問題