小编min*_*nae的帖子

在 C 中使用 shmat 命令的共享内存出现“无法分配内存”问题

我有两个 C 程序需要相互通信。我在一个程序中使用 shmget(key, 27, IPC_CREAT | 0666) 将一个变量存储在共享内存中。我每 1 秒更新一次这个变量。在另一个程序中,我使用 shmget(key, 27, 0666) 每 1 秒访问一次它。

这非常有效,但一段时间后(通常是几个小时),检索数据的程序会因段错误而崩溃。我使用 gdb 将段错误查明到 shmget(key, 27, 0666) 行。返回的错误代码为:

ENOMEM 无法为描述符或页表分配内存。

当我使用 ipcs -m 从命令提示符检查共享内存段时,我当前看到以下内容:

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x00000000 65536      root       600        393216     2          dest         
0x00000000 98305      root       600        393216     2          dest         
0x00000000 131074     root       600        393216     2          dest         
0x00000000 163843     root       600        393216     2          dest         
0x00000000 196612     root       600        393216     2          dest         
0x00000000 229381     root …
Run Code Online (Sandbox Code Playgroud)

c linux ipc shared-memory segmentation-fault

2
推荐指数
1
解决办法
5276
查看次数

标签 统计

c ×1

ipc ×1

linux ×1

segmentation-fault ×1

shared-memory ×1