让我们举个例子:
struct args{
char *fname;
}
int main(void){
struct args tArg;
tArg.fname = malloc(10);
strcpy(tArg.fname, "ciao");
pthread_create(&p1, NULL, thread, (void *)&tArg);
pthread_join(p1, NULL);
free(tArg.fname);
return 0;
}
void *thread(void *p1Arguments){
struct args *p1 = p1Arguments;
printf("%s\n", p1->fname);
}
thread
中的 printf
导致程序出现段错误,因为 p1->fname
中没有任何内容。
我该怎么做才能传递 malloc'ed 字符串?
编辑:很抱歉我忘了写pthread_join
最佳答案
看起来像:
1) 您在 struct tArg 中正确分配和初始化“fname”
2) 你也正确地将 tArg 传递到你的线程中
...但是...
3) 你的主程序在线程访问它之前取消分配“fname”(糟糕!)
建议:
在您创建线程之后放置一个“getchar()”(之前您调用“free()”),这样 main 将在释放之前等待用户点击“ENTER”在它退出之前。
关于c - 如何将 malloced 变量传递给结构到 C 中新创建的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15620934/