私はC++で構造体を使用していますが、その構造体にポインタを保存しようとしますが、その構造体をスレッドで使用しようとすると構造体のデータを取得できません。Pthreads and Structures C++
struct threadData {
void* memPointer;
void* instructionPointer;
void* stackPointer;
int memsize;
};
void *worker_thread(void *arg) {
struct threadData *my_data;
my_data = (struct threadData *) arg;
cout<<"INSTRUCTION POINTER: "<<my_data->instructionPointer<<endl;
cout<<"MEMORY POINTER: "<<my_data->memPointer<<endl;
cout<<"STACK POINTER: "<<my_data->stackPointer<<endl;
cout<<"MEMORY SIZE: "<<my_data->memsize<<endl;
}
int main() {
pthread_t my_thread;
int ret;
struct threadData td = { calloc(1, 32), calloc(1000000, 64), calloc(34, 4),6475 };
ret = pthread_create(&my_thread, NULL, worker_thread, (void *) &td);
pthread_detach(my_thread);
//pthread_exit(NULL);
}
しかし、私はpthread_detachの後にpthread_exit(NULL)を使用するとき、私は方法「worker_thread」における構造の情報を使用することができます。
C++を使用している場合、構造体を初期化するためにコンストラクタを使用していないのはなぜですか?あなたはCスタイルのキャストも使用していますし、 'struct'キーワードを使ってあなたのstruct型を参照しています(これはC++ではほとんど必要ありません)。これは非常にCのようなC++コードです... – DaoWen
あなたがやろうとしていることのC++ 11実装:http://coliru.stacked-crooked.com/a/f0b3dadb23bd7bba – kfsone
@kfsoneあなたはまだcalloc呼び出しを置き換えるかもしれませんそれを完全にC++のようにするには、 'new char [x * y]'を使ってください。完全性のために、私はまだ割り当てられたデータを解放/削除します。確かに、ここでは必要ではありませんが、割り当てられたメモリを最初から破棄することを前に考えると、いつかメモリリークが発生するのを防ぐことができます。 – Aconcagua