memcpy 和共享内存结构
memcpy and shared memory struct
我在共享内存段中有一个结构,我正在尝试使用 memcpy 访问我的结构中的二维数组。
struct shared_mem_struct{
int proc_id;
int flag[21];
int turn;
char bounded_buffer[5][200];
};
我正在尝试使用 memcpy 访问 bounded_buffer,但我总是收到垃圾。
memcpy(shared_mem->bounded_buffer[z], "empty", sizeof(shared_mem));
我已经阅读了 memcpy 的文档,但我对有效的解决方案一无所知。我也试过:
memcpy(shared_mem->bounded_buffer[z], "empty", sizeof(shared_mem->bounded_buffer[index));
我可以在所有分叉中读写,因此访问共享内存不是问题。
因为你做错了。
memcpy(shared_mem->bounded_buffer[z], "empty", sizeof(shared_mem));
应该是
memcpy(shared_mem->bounded_buffer[z], "empty", strlen("empty")+1);
因为它不是您要复制的字符的缓冲区字节大小,而是您要从 "empty"
复制这些字母。这就是为什么长度应该是1
加上长度
在您的例子中,您正在访问超出字符串文字范围的内存。那是 undefined behavior。
我在共享内存段中有一个结构,我正在尝试使用 memcpy 访问我的结构中的二维数组。
struct shared_mem_struct{
int proc_id;
int flag[21];
int turn;
char bounded_buffer[5][200];
};
我正在尝试使用 memcpy 访问 bounded_buffer,但我总是收到垃圾。
memcpy(shared_mem->bounded_buffer[z], "empty", sizeof(shared_mem));
我已经阅读了 memcpy 的文档,但我对有效的解决方案一无所知。我也试过:
memcpy(shared_mem->bounded_buffer[z], "empty", sizeof(shared_mem->bounded_buffer[index));
我可以在所有分叉中读写,因此访问共享内存不是问题。
因为你做错了。
memcpy(shared_mem->bounded_buffer[z], "empty", sizeof(shared_mem));
应该是
memcpy(shared_mem->bounded_buffer[z], "empty", strlen("empty")+1);
因为它不是您要复制的字符的缓冲区字节大小,而是您要从 "empty"
复制这些字母。这就是为什么长度应该是1
加上长度
在您的例子中,您正在访问超出字符串文字范围的内存。那是 undefined behavior。