繁体   English   中英

访问共享内存段时出现分段错误

[英]segmentation fault when accessing shared memory segment

我需要实现一个在不同进程之间共享信息的程序。

但是当我尝试访问共享结构的成员时,会产生分段错误。

我该如何解决? 请参阅下面的代码。

源文件:

#include <string.h>
#include <stdio.h>
#include "ShM.h"

#define SHM_SIZE 1024 

int main(){

    stablishMemory();
    Deck *deck = obtainMemory();
    strncpy(deck->cards,"carlos",SHM_SIZE);
    unlinkMemory();
    return 0;
}

头文件(ShM.h):

#include <stdio.h>
#include <string.h>
#include <sys/shm.h>
#include <unistd.h>

int idMemory;

typedef struct {
    char *cards;
}Deck;

Deck* letra;
#define SHM_SIZE 1024 

void stablishMemory(){
    idMemory = shmget (obtainkey(), SHM_SIZE, 0777| IPC_CREAT);
    letra = (Deck* )shmat (idMemory, NULL,0);
}

key_t obtainkey(){
    return ftok("/bin/ls",24);
}

void unlinkMemory(){
    shmdt((Deck*)letra);

}

Deck* obtainMemory(){
    return letra;
}

void destroyMemory(){
    shmctl(idMemory, IPC_RMID, (struct shmid_ds*)NULL);
    unlink(" ");
}

这种结构不是独立的。 该结构可以在共享存储器内,但指针可以指向任何地方。

typedef struct {
    char *cards;  // the memory that cards points to could be outside the segment
} Deck;

您必须分配卡(它是一个悬空指针),但更重要的是,您还必须从共享区域分配 ,或使其成为内联缓冲区(在结构内),如:

要么:

deck = allocSharedMem(sizeof(*deck));
deck->cards = allocSharedMem(52);

或使其内联:

typedef struct {
    char cards[52];
} Deck;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM