-1

私は C に不慣れで、これらのポインターの概念は私にとって非常に混乱しています。とても単純に見えることをしようとしていますが、多くのコンパイル エラーが発生しています。

新しいスレッドを生成し、複数のポインターをパラメーターとして渡したい (c でグローバル変数を使用できる唯一の方法はポインターを使用する方法のようです) ため、これらすべてのポインターを保持する構造体を作成しましたが、コンパイルされないようです。私が何を変えても。

これが私のコードです(私の問題があると思われる場所を除いて、ほとんどのコードを取り出しました)

//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は、これまでに使用されたとしても、はるかに厄介な言語です。このタスクは非常に単純なはずですが、それを呼び出すためだけに変数に * または & i をいくつ配置する必要があるかを推測しているため、私はとても迷っています。

4

1 に答える 1

1

parametersを介してrequest_handler関数に のアドレスを渡す必要がありますpthread_create。ただし、ローカル変数であるため、そのアドレスを渡すのは適切ではありません。

したがって、それをポインタとして定義し、それにメモリを割り当てます。

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

を使って適当にメンバを設定し->、そのまま渡します。

更新:さらにいくつかのエラー

  • の定義を関数paramsの前に移動しrequest_handlerます。
  • 主にnotを定義parametersするparams *parametersstruct params *parameters
  • ポインターである場所ではparameters->なく、メンバーにアクセスするために使用します。parameters.
于 2013-04-20T06:03:16.770 に答える