在任务Task中,构造函数中执行shmat连接共享内存,执行完shmat共享内存才可以连接,也必须执行shmat才能获取共享内存首地址,因此shmat一般不会被遗漏执行。
但是shmdt执行之后,进程会与共享内存断开连接,不再能访问,再次访问会出现段错误Segmentation fault (core dumped)。
编码时,在任务的一个循环中进行了shmdt,导致第二个循环老是Segmentation fault (core dumped),找了好久。
因此,涉及到共享内存的操作,出现bug的原因可能包括未连接(shmat)或者提前断开(shmdt)。