gpt4 book ai didi

c - 线程和指针 C

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

我想知道我在这里做错了什么?我将 void 指针转换为结构缓冲区,它只打印出垃圾。 buffer now 不应该指向 ptr,它是一个指向我们为其分配内存的原始缓冲区的指针吗?

#include <stdio.h>
#include <pthread.h>

struct buffer{
int a;
char *string[];
}buffer;

void thread1_function(void *ptr){
struct buffer *buffer=(struct buffer*)ptr;

printf("hello world\n");

printf("%s-%n\n", buffer->string,buffer->a);

}

int main(){

struct buffer *buffer;
int err;
buffer = (struct buffer*)malloc((11*sizeof(char))+sizeof(int));
pthread_t thread1;
sprintf(buffer->string,"%s","strint");
buffer->a=1;
printf("main: %s - %d\n",buffer->string,buffer->a);
err = pthread_create(&thread1, NULL, thread1_function, &buffer);
printf("error: %d\n",err);
pthread_join(thread1,NULL);
return 0;
}

~

最佳答案

您将指向结构的指针传递给您的线程。尝试将指针传递给结构。 ;)

err = pthread_create(&thread1, NULL, thread1_function, &buffer);

成为

err = pthread_create(&thread1, NULL, thread1_function, buffer);

编辑:发现另一个错误:线程函数中的printf("...%n")%n表示将当前写入的数字存放到该位置,该位置的int*参数指向。你显然是指 %d ,就像在你的 main() 中一样。

关于c - 线程和指针 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10006435/

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