簡體   English   中英

C內存共享問題

[英]C memory sharing problems

我正在編寫一個共享內存程序,它一方面會創建一塊內存並為其編寫一個結構,然后從另一個程序中讀取該結構。 我的問題是我似乎只是將一個簡單的可變復制到結構中而沒有得到分段錯誤,從來沒有將結構復制到共享的內存塊中。 任何人都可以幫助我一點點。 謝謝

#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);


}

你的意思是

size_t sizeOfCompanyInfo = sizeof(*pdata);

這就是pdata指向的大小

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。 它同樣具有可讀性,可以減少一個變量,減少一個錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM