#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/shm.h>
int main()
{
int shmid;
char *viraddr;
char buffer[BUFSIZ];
shmid=shmget(1234,BUFSIZ,0666|IPC_CREAT);
viraddr=(char*)shmat(shmid, 0,0);
while(1)
{
puts("Enter some text:");
fgets(buffer,BUFSIZ,stdin);
strcat(viraddr,buffer);
if(strncmp(buffer,"end",3)==0)
break;
}
shmdt(viraddr);
exit(0);
}
我正在学习共享内存。我想实现两个进程之间的通信。当我运行此程序时,它始终指示此错误 - segmentation fault core dumped
。对此有何帮助?感谢。
答案 0 :(得分:1)
这里viraddr和buffer都有相同的大小。对于strcat(),建议dst大小至少比src大小大一个字节。 viraddr应该有足够的空间来保存缓冲区数据,以避免缓冲区溢出。
答案 1 :(得分:0)
也许,有时内存分配返回FFFFF
然后抛出Segmentation Fault Core Dumped
。原因是您没有足够的权限访问您的进程的内存。
只需使用 sudo
编译并运行代码即可。比如说你有这些文件
shm1.c
shm2.c
shm.h
然后你的命令需要按以下方式触发
sudo gcc shm1.c -o s1
sudo gcc shm2.c -o s2
sudo ./s1 &
sudo ./s2
如果您愿意在2个不同的终端上进行此操作,只需在终端1&amp;中触发sudo ./s1
即可。不同终端2中的sudo ./s2