私がしたいのは、私の共有メモリに "hey"と書き込むだけですが、その行にスローされます。非常に簡単なコードを次のようにデバッガが私に与え共有メモリセグメンテーションフォールトに書き込む
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/shm.h>
#define SHM_SIZE 1024
#define FLAGS IPC_CREAT | 0644
int main(){
key_t key;
int shmid;
if ((key = ftok("ex31.c", 'k')) == -1){
exit(1);}
if ((shmid = shmget(key, SHM_SIZE, FLAGS)) == -1) {
exit(1);}
char* shmaddr;
if(shmaddr=shmat(shmid,0,0) == (char*)-1){ //WRONG ARGUMENTS ??
exit(0); }
printf("opened shared memory\n"); //gets here
strcpy(shmaddr, "hey"); //GETS THROWN HERE
printf("after writing to memory\n"); //never get here
エラーは次のとおりです。
プログラムは、信号SIGSEGV、セグメンテーションフォールトを受けました。 0x0000000000401966 in main(argc = 1、argv = 0x7fffffffe068) ../ex31.c:449 449 strcpy(shmaddr、 "hey"); //ここに到達します
'ipcs -m'の出力をポストします。 –
私は恩赦ですか?出力はありません、これは私が持っているものです –
コンパイルに関する警告はありますか?あなたはそれらを読んだのですか?彼らは何が間違っているのか正確に説明するべきです。 –