2013-04-20 79 views
-1

我是C新手,這些指針的概念對我來說非常混亂。我試圖做一些看起來很簡單的事情,但是我收到了很多編譯錯誤。我想創建一個新的線程,並將它作爲參數傳遞給多個指針(看起來像你可以在c中使用全局變量的唯一方法就是通過指針),所以我創建了一個結構來存放所有這些指針,但是它不管我改變什麼,似乎都不會編譯。C - 將多個指針作爲參數傳遞給pthread_create

這裏是我的代碼(我拿出大部分的代碼,除了在我的問題似乎是)

//want to store the pointers in pointers, so when I change a pointer it changes the "global" variable 

void request_handler(params *parameters) { 
    params parameter = *parameters; 
    int *numberOfOtherServers = parameter.numberOfServers; 
    int *clientSock = parameter.clientSock; 
    char ***serverList = parameters.serverList; 
    struct function **functionList[10] = parameters.functionList[10]; 
} 

typedef struct { 
    int *clientSock; 
    int *numberOfServers; 
    char **serverList; 
    struct function *functionList[10]; 
} params; 

struct function { 
    char name[20]; 
    int parameterNumer; 
    int canDo; 
    char *otherServers[10]; 

}; 

int main(int argc, const char * argv[]) 
{ 
    int client_sock_desc; 

    pthread_t handler_thread; 

    struct function functionList[10] = {{"",0, 0, {}}}; 
    int i =0, numberofOtherServers; 
    char *serverList[10]; 

    //create a struct to pass as the parameters 
    struct params parameters; 
    parameters.clientSock = &client_sock_desc; 
    parameters.functionList[10] = functionList; 
    parameters.numberOfServers = &numberofOtherServers; 
    parameters.serverList = serverList; 

    //create a thread for the new clients request to be handled 
    if(pthread_create(&handler_thread, NULL, request_handler, parameters) != 0) { 
     perror("pthread_create failed"); 
    } 
} 

C是迄今爲止最凌亂的語言,如果使用過。這個任務應該是如此簡單,但我很遺憾,因爲猜測有多少*或者我應該放一個變量來調用它。

+1

「(似乎你可以在c中使用全局變量的唯一方法就是通過指針)」 - *** ??? *** – 2013-04-20 05:58:35

+0

是的。我不知道如何更改我在函數request_handler – user2158382 2013-04-20 06:00:36

+0

中主要聲明的變量,從我目前閱讀的內容來看,C沒有全局作用域變量 – user2158382 2013-04-20 06:00:55

回答

1

您應通過pthread_createparameters的地址傳遞給request_handler函數。但因爲它是一個局部變量,所以不適合傳遞它的地址。

因此將其定義爲指針併爲其分配內存。

struct params *parameters = malloc(sizeof(*parameters)); 

集成員適當地使用->,並通過它,因爲它是。

更新:多幾個錯誤params頂部

  • 移動的定義,以前request_handler功能。
  • 在主定義parameters一個params *parametersstruct params *parameters
  • 使用parameters->訪問,而不是parameters.成員無論它是指針。
+0

爲什麼你建議有必要給結構命名?這與問題無關。 – sapi 2013-04-20 06:09:53

+0

我仍然在request_handler()的參數中發生錯誤。它說'params'是一個未知的類型。 – user2158382 2013-04-20 06:11:12

+0

即使更改了該params結構的定義後,我仍然收到一個錯誤,說明未知類型名稱'params'。 – user2158382 2013-04-20 06:17:41

相關問題