pthread_mutex_init导致分段错误

我是一名大学生,正在学习如何处理线程和数据库。 总的来说,我正在尝试创建一个将获取锁列表的函数,查看程序正在处理的当前锁是否在列表中,并对该锁进行互斥锁。 当前,我在初始化* locks时遇到问题,但是每次这样做,都会遇到分段错误(核心转储)。 我已经尝试使用不同的方式来初始化互斥锁: auth 以及使用:&locks->lock = pthREAD_MUTEX_INITIALIZER;

.p文件中的

包含

pthread_mutex_init(&locks->lock,NULL); 

主文件:

typedef struct {
char *table;
pthrad_mutex_t lock;} TableLock;

my_realloc函数是这样的:

static pthread_mutex_t lock_on_locks;
static int active_tables = 0;
static TableLock *locks = NULL;

// Table locking functions
void sudba_lock(char *table) {
  sleep(2);
  if (locks == NULL) {
    my_realloc(locks,sizeof(TableLock));
    }
  pthread_mutex_lock(&lock_on_locks);
  char table_name[strlen(table) + 1];
  table_name[strlen(table)] = '\0';
  sprintf(table_name,"%s",table);
  if (active_tables == 0) {
    pthread_mutex_init(&locks->lock,NULL);
    pthread_mutex_lock(&locks->lock);
    locks[active_tables].table = table_name;
    active_tables++;
  }

感谢您的帮助

iCMS 回答:pthread_mutex_init导致分段错误

您的崩溃与pthread_mutex_lock无关;只是因为您要传递一个空指针,因为您没有保存realloc的结果。您在哪里:

my_realloc(locks,sizeof(TableLock));

应该是:

locks = my_realloc(locks,sizeof(TableLock));

但是我不清楚您为什么仍要分配它,因为这看起来像是单实例锁。通常,锁要么具有静态存储持续时间,要么存在于您要分配的某些结构中 (它们将保护的内容)。单独分配单个锁是一种代码味道。

与崩溃无关,代码中还有很多其他问题。

本文链接:https://www.f2er.com/1935039.html

大家都在问