2014-02-28 78 views
2

運行此程序時出現分段錯誤。使用gdb,我確認它在撥打pthread_create創建線程時出現分段錯誤

#include <stdio.h> 
#include <pthread.h> 

struct point { 
    int x; 
    int y; 
    char name; 
}; 

void *start (void * P) { 
    while (1) { 

    } 
} 

main() { 
    struct point P; 
    P.name = 'P'; 
    P.x = 1; 
    P.y = 2; 

    pthread_t *tid; 
    pthread_create (tid, NULL, (void *) start, (void *) &P); 

    while (1) { 

    } 
} 

有人可以幫忙嗎?

回答

4

你定義一個指針pthread_t *tid,但從來沒有給它一個有效的值,將其更改爲:

pthread_t tid; 
pthread_create (&tid, NULL, (void *) start, (void *) &P); 
+0

哦,是的!它現在有效。但是,爲什麼它的工作,而不是一個結構指針P,我傳遞一個整數指針? –

+1

@SagarJha未定義的行爲並不意味着每次都無法工作。它偶爾會發生作用,但你不能依賴它。 –

+0

因爲你在開始時忽略了P,所以它的值是不相關的,從來沒有使用過 –