Проблемы с совместным использованием памяти - PullRequest
1 голос
/ 09 марта 2012

Я пишу программу с общей памятью, которая с одной стороны создаст часть памяти и запишет в нее структуру, а затем прочитает эту структуру из другой программы.Моя проблема в том, что я не могу просто скопировать простую переменную в структуру без ошибки сегментации, не говоря уже о копировании структуры в общую часть памяти.Может кто-нибудь помочь мне немного.Спасибо

#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <assert.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/shm.h>
#include <unistd.h>


struct companyInfo
{
    double sharePrice;
    char companyName[100];
}; 

int main()
{
    key_t key = 1234;
    int shmid;
    char* smPtr = NULL;
    int i = 1;
    struct companyInfo * pdata;
    size_t sizeOfCompanyInfo = sizeof(pdata);

    printf("Size: %d\n", sizeOfCompanyInfo);

    size_t sizeMem = sizeOfCompanyInfo*5;

    shmid = shmget(key, sizeMem, 0644 | IPC_CREAT);

    smPtr = (char*) shmat(shmid, (void*) 0, 0);

    char bank[100] = "AIB";

    strcpy(pdata->companyName, bank);


}

Ответы [ 2 ]

3 голосов
/ 09 марта 2012

Вы имеете в виду

size_t sizeOfCompanyInfo = sizeof(*pdata);

Это размер, на который указывает pdata

1 голос
/ 09 марта 2012

pdata не инициализируется, а sizeOfCompanyInfo инициализируется неправильно. Попробуйте это:

struct companyInfo * pdata;
size_t sizeOfCompanyInfo = sizeof *pdata;
...
shmid = shmget(....);
pdata = shmat(shmid, NULL, 0);
strcpy(pdata->companyName, "Hello there");

Тем не менее, я бы, вероятно, просто использовал sizeof *pdata вместо sizeOfCompanyInfo. Он так же читабелен, что делает на одну переменную меньше и на одну вещь, которая может быть неправильной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...