我最近發現更新我們的服務器上的OSX軟件後,我無法運行我的程序之一,沒有得到分段錯誤11.它是一個簡單的程序,試圖分配共享內存,然後釋放它。當我使用sudo編譯和運行我的文件時,它工作正常。任何幫助將非常感激!OSX和共享內存需要sudo
源代碼:
#include <stdlib.h>
#include <stdio.h>
#include <sys/shm.h>
#include <sys/ipc.h>
#include <sys/types.h>
#include <stddef.h>
#include <sys/un.h>
#include <unistd.h>
int main(){
double *shared;
int arrsize, shmid;
arrsize = 10;
shmid = shmget(IPC_PRIVATE, arrsize * sizeof(double), IPC_CREAT | 666);
shared = (double*) shmat(shmid, NULL, 0);
shared[2] = 3.0; //source of Segmentation Fault
shmdt((void*) shared);
shmctl(shmid, IPC_RMID, NULL);
printf("Success!");
return 0;
}
系統:
ProductName: Mac OS X
ProductVersion: 10.9.1
BuildVersion: 13B42
您有使用System V共享內存的具體原因嗎?如果您需要功能,並且POSIX共享內存更容易設置,則OS X Mach共享內存功能要強大得多。 –
您需要檢查所有'shm *'調用的返回值。 –
嘿,夥計們,對於遲到的回覆抱歉。 謝爾蓋 - 我從Ubuntu的移植程序。如果這個程序要留在osx上,我一定會看看mach共享內存。 安德魯 - 偉大的一點!我省略了那部分代碼,但我確實這樣做了。 – djzubah