valgrind - 写入大小无效

时间:2011-06-06 11:24:29

标签: size valgrind memcpy

我们有几个使用共享内存进行通信的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 个答案:

答案 0 :(得分:3)

memcpy(shmaddr, currentsessionsstruct, SHARED_SIZE);

您正在复制3 * sizeof(messagestruct) + sizeof(int)。我相信你只想复制sizeof(currentsessionstruct)