[英]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 lock\n");
pthread_mutex_lock( &mutex );
for (int x = 0; x < 5; x++)
{
printf("before pointer\n");
*(ptr+x) = 1;
}
pthread_mutex_unlock( &mutex );
}
首先,跨多個文件共享全局文件是一種糟糕的做法。 在這種情況下,您可能應該創建包裝函數來處理對該變量的所有訪問,包括互斥鎖。 在 someheader.h 中聲明那些 setter/getter function 然后在 someheader.c only中定義變量。 並使它們成為static
。
如果您確實使用了全局變量(您不應該這樣做),那么 header 文件中應該有一個extern
引用,而.c 文件中應該有一個變量定義。 您有多個變量定義,因此變量和互斥鎖都不起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.