2011-11-13 67 views
0

我建立了我的共享內存和映射我的對象與下面的代碼(由()MMAP打開):創建/初始化共享內存對象

shmfd = shm_open(SHMOBJ_PATH, O_CREAT | O_EXCL | O_RDWR, S_IRWXU | S_IRWXG); 
ftruncate(shmfd, shared_seg_size); 
bbuffer = (boundedBuffer *)mmap(NULL, shared_seg_size, PROT_READ | PROT_WRITE, MAP_SHARED, shmfd, 0); 

現在我需要初始化和添加/刪除項目/ bbuffer。當我嘗試添加/刪除時,出現分段錯誤:11,表示程序訪問了未分配的內存位置。我能做些什麼來解決這個問題?

+3

向我們展示了代碼和違規發生的位置。 – philant

+0

我出於任何原因嘗試訪問bbuffer時發生違規。 – mert

+0

你測試過bbufer不是NULL嗎?和shm_open()返回值? – philant

回答

0

胡亂猜測:

  • 也許你沒有頭文件mmap包括
  • 你是一個架構的64位void*和32位int

可能發生的情況是,編譯器默認將mmap作爲返回int,將其轉換爲指針,碰撞更高階的位。

從不投下函數的返回值,如mallocmmap,並始終認真對待編譯器的警告。

+0

我包括。我刪除了投射,我沒有收到編譯器的警告。 – mert