1

常に 8 の倍数である変数に基づいて、ある程度の量の共有メモリを割り当てようとしていますshmsz。ほとんどの場合、それは 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」を示しています

4

1 に答える 1

0

その共有メモリにアクセス違反がある場合 (読み取り専用の共有メモリに書き込もうとするなど)、プロセスは SIGSEGV またはSIGBUSを受け取ります。

あなたの場合、0666 で作成しているため、このシナリオで考えられる状況は 1 つだけです。その共有メモリからコードを実行しようとしていますか?

于 2012-09-28T15:29:54.060 に答える