gpt4 book ai didi

c - 线程程序和结构将值更改为垃圾

转载 作者:行者123 更新时间:2023-11-30 17:54:57 25 4
gpt4 key购买 nike

此时我正在编写一个测试程序来获取基础,但是当我运行它时,它会将垃圾值输入到我的结构中。

如果这有点不完整,我深表歉意,我一直在研究这个问题,在网上搜索了几个小时,我所做的一切似乎都是正确的,但是当我传递它们时,我在一些关键值中插入了垃圾pthread_create 函数。

感谢您的帮助!

这段代码给了我以下输出:

主函数运行!

gWorkerid 的初始设置 = 0

worker ID = 319534848

你好杜迪!

结束 sleep

gWorkerid 现在是垃圾值 = -946297088

我期待:

主函数运行!

gWorkerid 的初始设置 = 0

worker ID = 0

你好杜迪!

结束 sleep

gWorkerid 现在是垃圾值 = 0

    #include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <pthread.h>

#define MAX_CONN 3
#define MAX_LINE 1000

typedef struct worker_t
{
int id;
int connection;
pthread_t thread;
int used;
}WORKER_T;

struct sockaddr_in gServ_addr;

WORKER_T gWorker[MAX_CONN];
char sendBuff[1025];

// Thread function
void * worker_proc(void *arg)
{
WORKER_T *me = (WORKER_T*) arg;

printf("Howdy Doody!\n");

return NULL;
}

int main(int argc, char *argv[])
{
printf("main function running!\n");
pthread_t threadTest;
int i = 0;

gWorker[i].id = i;
printf("initial set of gWorkerid = %d\n", gWorker[i].id);
gWorker[i].connection = i;
gWorker[i].used = 1;
pthread_create(&gWorker[i], NULL, worker_proc, &gWorker[i]);

sleep(1);

printf("end sleep\n");
printf("gWorkerid is now trash value = %d\n", gWorker[i].id);

return 0;
}

最佳答案

行:

pthread_create (&gWorker[i], NULL, worker_proc, &gWorker[i]);

实际上应该是:

pthread_create (&(gWorker[i].thread), NULL, worker_proc, &gWorker[i]);

pthread_create() 的第一个参数是存储线程 ID 的位置,对于您的代码,它将它存储在结构的开头,覆盖 id.

通过传递结构体线程 ID 部分的地址,id 应该不会被 pthread_create() 影响。

关于c - 线程程序和结构将值更改为垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14639417/

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