我試圖理解爲什麼這個簡單的代碼導致了段錯誤,當我嘗試使用strcpy
複製一些文字到共享內存中:與System V段錯誤共享內存
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <string.h>
int main()
{
key_t key;
int flag,id;
char *buf;
flag=IPC_CREAT|0600;
if((key=ftok("myfile",12)) == -1) {
perror("key");
exit(2);
}
printf("%X\n",key);
if((id=shmget(key,512,flag)) < 0) exit(1);
if((buf=shmat(id,0,0)) < 0) exit(2);
printf("PID %d, buf=%p\n",getpid(),buf);
system("ipcs -m | grep 512");
sleep(20);
strcpy(buf,"Hello");
sleep(100);
shmdt(buf);
exit(0);
}
,這裏是我所得到的:
C1A0DAB
PID 12063, buf=0xffffffff8bc78000
0x0c1a0dab 271941746 username 600 512 1
Segmentation fault (core dumped)
此外,該方法的PMAP表示:
00007f778bc78000 4K rw-s- [ shmid=0x10358072 ]
我用指針buf
猜錯了什麼,但我不知道如何改正這一點。
任何想法?
共享存儲器,代碼需要的:#include和 的#include –
user3629249
這樣的:「#包括」是進程間通信,而不是共享內存。這:'#include '用於信號量,而不是共享內存 –
user3629249
沒有正確的#include語句,此代碼會導致編譯器引發17個警告。 (並且需要更正警告)BTW:鏈接時,訪問的庫是否正確? – user3629249