gpt4 book ai didi

C++ 空指针

转载 作者:行者123 更新时间:2023-11-27 22:45:44 25 4
gpt4 key购买 nike

pthread_mutex_t mutexREAD;
int main(int argc, char *argv[]){
pthread_t READERthreads;
pthread_mutex_init(&mutexREAD, NULL);
string *fname;
cin>> *fname;
pthread_create(&READERthreads, NULL, reader_thread, (void*) fname);
}
void *reader_thread(void *param){
string fname = *(string *) param;
cout<<"filename is "<< fname<<endl;
ifstream myfile(fname.c_str());
return NULL;
}

上面的代码抛出段错误。我可能搞砸了我的指示,但我不知道哪里出了问题,我该如何解决?

最佳答案

两个问题:第一个也是可能导致崩溃的原因是您有一个指针 fname 但它实际上并不指向 任何地方。当您取消引用时,这会导致未定义的行为

除非需要将不同的字符串传递给不同的线程,否则不需要是指针,调用pthread_create时使用寻址运算符&即可。

你当然可以使用std::thread相反,并按值传递字符串,根本不必担心指针:

...
std::string fname;
std::cin >> fname;

std::thread READERthread{&reader_thread, fname);
READERthread.join();
...

void reader_thread(std::string fname)
{
...
}

第二个问题是在退出进程之前没有等待线程完成。那会杀死线程。您要么需要加入 等待它退出的线程。或者你可以分离它,只退出主线程(而不是进程),这让另一个线程在后台运行。

关于C++ 空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43271957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com