2次元配列にデータを格納するプログラムを作成したいとします。この2D配列は共有メモリに作成する必要があります。共有メモリに2D配列を作成する
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
key_t key;
int shmBuf1id;
int *buf1Ptr;
main(int argc, int *argv[])
{
createBuf1();
}
createBuf1()
{
key = ftok(".",'b');
shmBuf1id = shmget(key,sizeof(int[9][9]),IPC_CREAT|0666);
if(shmBuf1id == -1)
{
perror("shmget");
exit(1);
}
else
{
printf("Creating new Sahred memory sement\n");
buf1Ptr[3] = shmat(shmBuf1id,0,0);
if(buf1Ptr == -1)
{
perror("shmat");
exit(1);
}
}
}
しかし、私はこのプログラムを実行すると、セグメンテーションフォルト(コアダンプ)エラーが発生します。共有メモリに2D配列を正しく作成しましたか?
あなたは 'buf1Ptr [3]'に割り当てられる前に 'buf1Ptr'を初期化したことはありません。 – Barmar
2次元配列は存在せず、1次元配列(1D配列)もありません。これはidenomaticな方法です。 'int *'は 'int'へのポインタです。 – Olaf