gpt4 book ai didi

c - 使用 pthread 获取总线错误 10

转载 作者:行者123 更新时间:2023-12-02 03:20:05 24 4
gpt4 key购买 nike

我的命令行工具不断抛出总线错误:10消息。 Xcode 调试器显示 EXC_BAD_ACCESS 消息并突出显示创建线程的函数调用。手动调试显示执行流在线程流内的随机位置中断。我尝试了另一个编译器(gcc),但结果是一样的。禁用 pthread_mutex_lock()pthread_mutex_unlock() 没有帮助。我写了这个小例子来重现该错误。

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


typedef struct thread_args {
pthread_mutex_t* mutex;
} thread_args;


void* test(void* t_args) {
printf("Thread initiated\n");
thread_args* args = (thread_args* )t_args;
printf("Args casted\n");
pthread_mutex_lock(args->mutex);
printf("Mutex locked\n");
pthread_mutex_unlock(args->mutex);
printf("Mutex unlocked\n");
pthread_exit(NULL);
}


int main() {
pthread_mutex_t mutex1;
pthread_mutex_init(&mutex1, NULL);

thread_args args;
args.mutex = &mutex1;

pthread_t* thread;
printf("Initiating a thread\n");
pthread_create(thread, NULL, test, &args);
return(0);
}

最佳答案

我认为,就你而言,

pthread_create(thread, NULL, test, &args);

在此调用中,thread 是一个指针,未分配内存。因此,本质上 pthread_create() 尝试写入未初始化的内存,这会创建 undefined behavior .

引用 pthread_create() 的手册页

Before returning, a successful call to pthread_create() stores the ID of the new thread in the buffer pointed to by thread;....

相反,你可以这样做

 pthread_t thread;
...
pthread_create(&thread, NULL, test, &args);

关于c - 使用 pthread 获取总线错误 10,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31011959/

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