// reading
if((shmid = shmget(key, 0, 0)) < 0) {
perror("shmget");
exit(50);
}
// attach
if((data = shmat(shmid, (void *)0, 0)) == (char *) -1) {
perror("shmat");
exit(100);
}
// get memory size
struct shmid_ds shm_info;
size_t shm_size;
int shm_rc;
if((shm_rc = shmctl(shmid, IPC_STAT, &shm_info)) < 0)
exit(101);
shm_size = shm_info.shm_segsz;
Иногда данные не заканчиваются нулем, и вызов strlen (data) вызывает ошибки по умолчанию ...
Итак, я пытался убедиться, что он завершен нулем, набрав
data[shm_size] = '\0';
Но теперь иногда происходит сбой в этой строке кода.
Что я делаю не так?
РЕДАКТИРОВАТЬ: Спасибо за вашу поддержку! Я думаю, что после вашего объяснения о strlen () + 1 == shm_size я изменил остальную часть моего кода, который не был размещен здесь, и кажется, что все в порядке. Я жду новых segfaults и, надеюсь, я не получу;)