gpt4 book ai didi

c - mutex_init() 导致奇怪的段错误

转载 作者:行者123 更新时间:2023-11-30 18:22:44 25 4
gpt4 key购买 nike

我在尝试处理 posix 线程时遇到了一个奇怪的问题。我将从代码开始:

#include <pthread.h>
#include <semaphore.h>


typedef struct {
pthread_mutex_t *mutex;
} buffer_t;


buffer_t *buffer_alloc(unsigned int maxSize) {

buffer_t *buffer = (buffer_t *) malloc(sizeof(buffer_t));
if(buffer == NULL)
return NULL;

pthread_mutex_init(buffer->mutex, NULL); // This line causes a crash

pthread_mutex_t *mutex;
pthread_mutex_init(mutex, NULL); // This one doesn't

}

我在第一个 pthread_mutex_init() 上遇到段错误。这是 gdb 的运行日志和回溯:

[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".


Program received signal SIGSEGV, Segmentation fault.
__pthread_mutex_init (mutex=0x0, mutexattr=0x0) at pthread_mutex_init.c:83
83 pthread_mutex_init.c: No such file or directory.

(gdb) backtrace
#0 __pthread_mutex_init (mutex=0x0, mutexattr=0x0) at pthread_mutex_init.c:83
#1 0x00000000004015a8 in buffer_alloc (maxSize=10) at buffers.c:26

感谢您的帮助!

最佳答案

将结构定义更改为:

typedef struct {
pthread_mutex_t mutex;
} buffer_t;

然后互斥体初始化为:

pthread_mutex_init(&buffer->mutex, NULL);

您的代码在这两种情况下都使用未初始化的指针。在第二种情况下没有(立即)导致段错误纯粹是运气,它可能会破坏一些变量并在以后引起麻烦。

关于c - mutex_init() 导致奇怪的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15645499/

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