gpt4 book ai didi

c - 从 C 中的多个线程接收值

转载 作者:太空宇宙 更新时间:2023-11-04 04:00:29 25 4
gpt4 key购买 nike

#include<pthread.h>
#include<stdio.h>
#include<sys/stat.h>
#include<errno.h>

#define SIZE 3

/***I'm trying to send name of each file in a thread and trying to receive their respective size in main *******/

void *doit(void *name)
{
int *size;
struct stat st;
char temp_name[30];
memset(temp_name, '\0', sizeof(temp_name));
strcpy(temp_name, (char *)name); //type casted
stat(temp_name, &st);
*size = st.st_size; //calculated the size

printf("File name is: %s\n", temp_name);
printf("File size is: %d\n", *size);
pthread_exit((void *)size); //exited from thread
}

int main(int argc, char *argv[])
{
pthread_t th_id[SIZE];
int ret_val;
int i;
void **size[SIZE];
for(i=0; i<SIZE;i++)
{
size[i] = (void **)malloc(30*sizeof(void *)); //allocated memory to void double pointer
if(size[i] == NULL)
{
printf("Memory not allocated to %dth member of size\n", (i+1));
}
}
for(i=0; i<3; i++)
{
/*****Creating Thread**********/
ret_val = pthread_create(&th_id[i], NULL, &doit, (void *)argv[1+i]);
if(ret_val != 0)
{
perror("Thread creation error\n");
exit(0);
}
pthread_join(th_id[i], size[i]);
printf("Size is %d\n",**(int **)size[i]); //typecasted and printed
}
pthread_exit(NULL);
return 0;
}

在这个程序中,我在第一次调用 pthread_join 后遇到段错误。传递第一个文件时,我在 main 中得到了正确的大小。但是在调用第二个文件期间我遇到了段错误。使用 gdb,我得到“**size[1] 和 **size[2] 尽管有 malloc,但仍为 NULL。但是在 main 的开始,我在分配内存时没有收到错误消息。这应该意味着内存是初始分配的。请帮助我该怎么做。

最佳答案

    int *size;
struct stat st;
char temp_name[30];
memset(temp_name, '\0', sizeof(temp_name));
strcpy(temp_name, (char *)name); //type casted
stat(temp_name, &st);
*size = st.st_size; //calculated the size

您正在取消引用未初始化的指针。你永远不会让 size 指向任何东西。

关于c - 从 C 中的多个线程接收值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12354091/

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