size - valgrind - 无效的写入大小

标签 size valgrind memcpy

我们有几个使用共享内存进行通信的 C 应用程序。第一个应用程序添加消息,第二个应用程序始终从共享内存中读取。

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

我们需要 3 个 session (针对 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

感谢您提供任何有用的信息。

最佳答案

memcpy(shmaddr, currentsessionsstruct, SHARED_SIZE);

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

关于size - valgrind - 无效的写入大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6251303/

相关文章:

delphi - 如何用鼠标调整cxgrid的大小?

c - Valgrind 在二维数组中读取 1 的大小无效

Valgrind 与 Linux 性能相关性

C++ memcpy 读取内存

c++ - 固定大小字符串类的最佳实践

java - JFrame 的 setIconImages() 方法使用哪些图标大小?

android - 减少 IntelliJ 中调试 APK 的大小

c - Valgrind:是否有内存泄漏?

C - 使用 memcpy 直接从内存中复制

从源 wchar* 中的位置 a 复制到位置 b 从位置 c 复制到目标 wchar*,不以 null 终止