私はこれを何時間も試していて、思いついたことをすべてグーグルで検索しましたが、気が狂いそうです。
私は構造体を持っています:
typedef struct {
int rows;
int collumns;
int* mat;
char* IDs_row;
} mem;
int* (マトリックス) と char* のサイズは後でわかります。
その際、次のように共有メモリを作成します。
mem *ctrl;
int size = (2 + ((i-1)*num_cons))*sizeof(int) + i*26*sizeof(char); //I have the real size now
shmemid = shmget(KEY, size, IPC_CREAT | 0666);
if (shmemid < 0) {
perror("Ha fallado la creacion de la memoria compartida.");
exit(1);
}
ctrl = (mem *)shmat(shmemid, 0, 0);
if (ctrl <= (mem *)(0)) {
perror("Ha fallado el acceso a memoria compartida");
exit(2);
}
ここでは問題ありません。次に、ctrl->rows と collumns に値を与え、すべての行列に 0 を割り当てます。
しかし、その後、char* と bam、セグメンテーション違反に何かを書き込みます。
プログラムをデバッグすると、mat と IDs_row の両方のポインターが null であることがわかりました。共有メモリセグメント内で正しい値を与えるにはどうすればよいですか??
試してみるために char* ポインターを削除しようとしましたが、共有メモリに接続されている他のプログラムでセグメンテーション違反エラーが発生し、マトリックス内の値をチェックしました (チェック -> 行と -> 列は成功)