全局写入时出现分段错误
Segmentation fault on writing on global
我有一个链接到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文件中应该只有一个变量定义。您有多个变量定义,因此变量和互斥对象都不起作用。
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?