valgrind - неверный размер записи - PullRequest
2 голосов
/ 06 июня 2011

у нас есть пара приложений на C, которые общаются, используя общую память.Первое приложение добавляет сообщение, а второе всегда читает из общей памяти.

struct messagestruct {
 unsigned int sessionid;
 uint8_t message[16]; //unsigned 8bit int
}__attribute__ ((__packed__));

нам нужно 3 сеанса (для 3 пользователей).определяемый размер разделяемой памяти как

#define SHARED_SIZE ( 3 *  sizeof(messagestruct)) + sizeof(int)

мы получаем доступ к разделяемой памяти как

int sesskey = ftok("/path/to/a/file", "B");
int shmemoryid = shmget(sesskey, SHARED_SIZE, 0666 | IPC_CREAT);    

во время копирования структур в разделяемую память, ошибка отчетов valgrind (недопустимый размер записи 1)

void *shmaddr = shmat(shmemoryid, NULL, 0);
int *sessnum;
struct messagestruct *msgstruct;
sessnum = (int *)shmaddr;
msgstruct = (struct messagestruct*)((void*) shmaddr + sizeof(int));   
memcpy(shmaddr, currentsessionsstruct, SHARED_SIZE); //-->valgrind error invalid write size 1

спасибо за любую полезную информацию.

1 Ответ

3 голосов
/ 06 июня 2011
memcpy(shmaddr, currentsessionsstruct, SHARED_SIZE);

Вы копируете 3 * sizeof(messagestruct) + sizeof(int).Я считаю, что вы хотите скопировать только sizeof(currentsessionstruct).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...