我有一个似乎与pthread_create有关的奇怪问题。
我有一个包含const char *变量的结构:
typedef struct Notification {
const char *summary;
const char *body;
} Notification;
值得注意的是,数据是使用g_variant_get_string(content, NULL);
的{{1}}分配给这些变量的,但据我所知,不应该影响此问题。
在pthread中使用此结构时似乎出现了问题。
const gchar *
运行简单:
const gchar *summary = NULL;
const gchar *body = NULL;
summary = g_variant_get_string(content, NULL);
body = g_variant_get_string(content, NULL);
Notification *n = malloc(sizeof(Notification));
assert(n != NULL);
n->summary = summary;
n->body = body;
pthread_create(&split_notification, NULL, &run, (void *)n));
它产生垃圾的地方,例如:
void *
run(void *arg)
{
Notification *n = (Notification *)arg;
printf("summary: %s\n", n->summary);
printf("body: %s\n", n->body);
return NULL;
}
我尝试将相同的结构转换为void和back,并产生所需的结果。发生了什么事?