-1

そのため、スレッドプロジェクトに取り組んでおり、ファイルの1つをテストして、構造体とフィールドが正しい値を取得していることを確認しています。私はこの関数を実行しています:

struct ReportQueue {
   sem_t count;
   pthread_mutex_t mutexAdd;
   ReportList *RQList;
};

ReportQueue *RQCreate() {
   ReportQueue *rq;

   printf("RQCreate() called\n");
   rq = calloc(1, sizeof(ReportQueue));
   sem_init(&rq->count, 0, 0);
   pthread_mutex_init(&rq->mutexAdd, NULL);
   rq->RQList = NULL;
   return rq;
}

このメインで:

int main() {
   ReportQueue *rQueue;
   Report report;

   rQueue = RQCreate();
   printf("SemCount: |%d| RQList: |%d| MutexAdd |%d|\n", rQueue->count, rQueue->RQList, rQueue->mutexAdd);
   printf("SemCount: |%d|\n", rQueue->count);
   printf("RQList: |%d|\n", rQueue->RQList);
   printf("MutexAdd: |%d|\n", rQueue->mutexAdd);

   return;
}

そして、私はこの出力を取得しています:

RQCreate() called
SemCount: |0| RQList: |128| MutexAdd |0|
SemCount: |0|
RQList: |0|
MutexAdd: |0|

それは私には意味がありません。「RQList」の値は、印刷方法によって変わることはありませんか?私は何が間違っているのですか?

4

2 に答える 2

1

正常に機能する最小限の例...これは答えではありませんが、すべてが問題ないように見えることを示しています

+コメントに収まりませんでした:D

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

struct ReportQueue {
   sem_t count;
   pthread_mutex_t mutexAdd;
   int *RQList;
};

struct ReportQueue *RQCreate() {
   struct ReportQueue *rq;

   printf("RQCreate() called\n");
   rq = calloc(1, sizeof(struct ReportQueue));
   sem_init(&rq->count, 0, 0);
   pthread_mutex_init(&rq->mutexAdd, NULL);
   rq->RQList = NULL;
   return rq;
}

int main() {
   struct ReportQueue *rQueue;

   rQueue = RQCreate();
   printf("SemCount: |%d| RQList: |%d| \n", rQueue->count, (int)rQueue->RQList);
   printf("SemCount: |%d|\n", rQueue->count);
   printf("RQList: |%d|\n", (int)rQueue->RQList);

   return 1;
}
于 2013-03-17T21:48:46.443 に答える
0

タイプ、、、またはポインタ%dの変数を出力するために使用しないでください。せいぜい、実装で定義された動作が得られます(もし、そしてたまたまのtypedefであり、ポインタがたまたまintと同じサイズである場合)。ただし、これらの型は対応する引数の型が何であるかを示すものであるため、一般に、これらの型は関係がない可能性があるため、未定義の動作が発生します。sem_tpthread_mutex_tsem_tpthread_mutex_tintint%dprintf()

そのため、printf()呼び出しは意味のない出力を生成します。あなたはそれに引数を渡してprintf()いるのは意味がありません。

于 2013-03-20T04:37:16.840 に答える