2012-09-27 61 views
1

我試圖分配基於可變shmsz這始終是8。一些倍數。在大多數情況下,共享存儲器的一些量,這是8或16。共享內存不能分配?

使用以下代碼:

// allocate shared memory 
if ((shmid = shmget(IPC_PRIVATE, shmsz, IPC_CREAT | 0666)) < 0) { 
    printf("Could not allocate shared memory.\n"); 
    exit(1); 
} 

這曾經像一個魅力工作。但現在,我是總是得到錯誤信息並讓我的程序退出。

編輯errno()顯示「總線錯誤:10」

+1

如何在通話失敗時查看'errno'的值,這可能會提示... –

+1

'errno'說什麼? –

+0

編輯:我的歉意,錯誤顯示如下:'巴士錯誤:10',但我是新來的所有這一切,所以我不確定該怎麼做。 –

回答

0

有時候,當存在這樣的共享內存訪問的衝突(如嘗試在你只讀共享內存寫入)該進程收到一個SIGSEGV或SIGBUS

對於你的情況,當你使用0666創建它時,這種情況只有一種可能的情況:你是否試圖從共享內存中執行代碼?