C语言 为什么给共享内存中的 memcpy 一个分段错误



我当前的项目有问题。

这是我的标题:

#define SHARED_MEMORY_NAME "/osmpmemory"
#define OSMP_MAX_MESSAGES_PROC 16
#define OSMP_MAX_SLOTS 256
#define OSMP_MAX_PAYLOAD_LENGTH 128
typedef struct {
char msg[OSMP_MAX_PAYLOAD_LENGTH];
} osmp_msg;
typedef struct {
size_t memory_size;
int process_count;
osmp_msg slots[OSMP_MAX_SLOTS];
} shm_conf;

这是我的代码:

shm_conf* memory_conf;
size_t shm_size =  sizeof(shm_conf) + sizeof(int[count][2]) + sizeof(osmp_msg[count][OSMP_MAX_MESSAGES_PROC]);
int fd;
if((fd = shm_open(SHARED_MEMORY_NAME, O_CREAT | O_RDWR, 0640)) == -1) {
return -1;
}
if(ftruncate(fd, shm_size) == -1) {
printf("%sn", strerror(errno));
return -1;
}

if((memory_conf = (shm_conf*)mmap(NULL, shm_size , PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0)) == MAP_FAILED) {
printf("%sn", strerror(errno));
return 0;
}
memory_conf->process_count = count;
memory_conf->memory_size = shm_size;
int process_numbers[memory_conf->process_count][2];
for(int i = 0; i < memory_conf->process_count; i++) {
process_numbers[i][0] = 0;
process_numbers[i][1] = i;
}
memcpy(memory_conf + sizeof(shm_conf), process_numbers, sizeof(process_numbers));

我想在shm_conf结构之后存储一个二维数组。但是memcpy给了我一个细分错误,我不知道为什么,你能帮我吗?

在这个数组之后,我想存储另一个数组,这就是为什么shm_size比我目前需要的要大。

错误可能是memcpy调用中的指针算术。

memcpy(memory_conf + sizeof(shm_conf), process_numbers, sizeof(process_numbers));

memory_conf已经是一个shm_conf指针,因此它递增sizeof(shm_conf)。该行应更改为:

memcpy(memory_conf + 1, process_numbers, sizeof(process_numbers));

避免复制到未分配的内存中

最新更新