全局写入时出现分段错误

Segmentation fault on writing on global

本文关键字:分段 错误 全局      更新时间:2024-05-10

我有一个链接到main.c的c++库。在这两个文件之间使用了一个全局变量。变量在sharedata.h中声明

#ifndef __SHARE_DATA_H__
#define __SHARE_DATA_H__
#include <stdio.h>
#include <pthread.h>
#ifdef __cplusplus
extern "C" {
#endif
// declare your two vars in the header file as extern. 
extern pthread_mutex_t mutex;
extern int *ptr;

#ifdef __cplusplus
}
#endif
#endif /* __SHARE_DATA_H__ */

main.c内部,我有ptr的声明和内存分配。我可以read and print of data in *ptr

main.c
#include "sharedata.h"
pthread_mutex_t mutex;
int *ptr;
int main(){
pthread_mutex_lock( &mutex );
ptr = (int *)malloc((4 * 5) * sizeof(int)); 
pthread_mutex_unlock( &mutex );
/*do some other things
%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%
*/
pthread_mutex_lock( &mutex ); 
for (int x = 0; x < 5; x++)
{     
printf("%d ", *(ptr+x));         
}
printf("n");
pthread_mutex_unlock( &mutex ); 
}

gstdsexample.cpp中,我有全局变量的声明和初始化。但是,当我尝试将数据写入*ptr时,我在这行有segmentation fault*(ptr+x) = 1;可能出了什么问题?

#include "sharedata.h"
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int *ptr;
{
printf("before lockn");
pthread_mutex_lock( &mutex ); 
for (int x = 0; x < 5; x++)
{     
printf("before pointern");
*(ptr+x) = 1;      
}
pthread_mutex_unlock( &mutex ); 
}

首先,跨多个文件共享全局文件是一种可怕的做法。在这种情况下,您可能应该创建包装器函数来处理对该变量的所有访问,包括互斥。在someheader.h中声明那些setter/getter函数,然后仅在someheader.c中定义变量。并使它们成为static

如果您确实使用了全局变量(不应该这样做(,那么头文件中应该有一个extern引用,.c文件中应该只有一个变量定义。您有多个变量定义,因此变量和互斥对象都不起作用。