簡體   English   中英

全局寫入時出現分段錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM