gpt4 book ai didi

c - pthread_create() 后的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 07:10:37 24 4
gpt4 key购买 nike

用这个创建一个线程:

pthread_t thread; 
pthread_create(&thread, NULL, (void*)&serve_connection, (void*)sockfd);

我调用的函数定义为:

void serve_connection (void* sockfd) {
ssize_t n, result;
char line[MAXLINE];
connection_t conn;
connection_init (&conn);
conn.sockfd = *((int*)sockfd);
while (! shutting_down) {
...
...
}}

函数的其余部分在“...”中,但它是无关紧要的,因为我已将段错误跟踪到

conn.sockfd = *((int*)sockfd);

其中 conn.sockfd 是 'int' 类型。

最初 serve_connection 是:

void serve_connection (int sockfd){
...
conn.sockfd = sockfd;
...
}

但我是从线程中调用它的,因此必须进行更改。我还应该注意,传递给 pthread_create 的 sockfd 是一个具有值的 int。

我在编译时也收到了这些警告:

warning: ISO C forbids conversion of function pointer to object pointer type
warning: cast to pointer from integer of different size
warning: ISO C forbids passing argument 3 of âpthread_createâ between function pointer and âvoid *â
note: expected âvoid * (*)(void *)â but argument is of type âvoid *â

这些都是指我调用pthread_create的那一行。直到现在我都忽略了警告,因为程序运行到上面指定的行,所以我假设函数被正确调用。我只是无法弄清楚是什么导致了段错误,因为我对使用 pthreads 还是陌生的(我假设我正在调用或声明错误,但查看库并没有真正帮助)。

最佳答案

在你的情况下,考虑更换

conn.sockfd = *((int*)sockfd);

通过

conn.sockfd = (int)sockfd;

You didn't have passed the sockfd variable as a pointer so you cannot dereference it. Take a look at : http://en.wikipedia.org/wiki/Dereference_operator

关于c - pthread_create() 后的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28729743/

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