2012-04-09 52 views
0

我正在構建一個建築物服務器和客戶端程序。我試圖讓它們通過套接字進行通信(如果重要的是我正在寫一個32位操作系統的Linux,並且客戶端和服務器都將在同一系統上運行)。現在,我的下一個結構:訪問該結構時通過套接字和segfaulting發送結構

struct config_line { 
    char name[MAX_WORD]; //1 byte 
    int time;    //4 bytes 
}; 

struct config { 
    struct config_line *lines; // 4 bytes, points to a struct of 8 bytes 
    int count;     // 4 bytes 
}; 

configData被定義爲followes

struct config configData; // global 

我發送configData這樣的:現在

send (clients [scn], &configData, sizeof (configData), 0) 

,我的客戶端程序,裏面當我嘗試訪問

configData.lines[configIndex].name 

它在該行上發生段錯誤。任何人有一個想法爲什麼?

+0

recv(s,&configData, sizeof(configData),0); – 2012-04-09 20:58:29

回答

1

當您發送類型config,它有一個指針config_line空間,但不包含動態分配的,其中該指針指向(我認爲)陣列中的數據。

然後客戶端獲得config類型,但它具有無效的指針值(在客戶端上),因爲數組未發送且指針未設置爲該數組。 (指針在發送者上有效,但不在客戶端上 - 它們使用單​​獨的內存空間)

您將需要指定一個固定大小的數組config,它可以包含您將要使用的最大元素數(然後發送將包含該數據),或發送動態數組的內容並在客戶端解析它,並將config指針設置爲該數組,因此解引用有效