我正在编写一个共享内存程序,它一方面会创建一块内存并为其编写一个结构,然后从另一个程序中读取该结构。我的问题是我似乎只是将一个简单的可变复制到结构中而没有得到分段错误,从来没有将结构复制到共享的内存块中。任何人都可以帮助我一点点。感谢
#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);
}
答案 0 :(得分:3)
你的意思是
size_t sizeOfCompanyInfo = sizeof(*pdata);
这是pdata指向
的大小答案 1 :(得分:1)
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。它同样具有可读性,可以减少一个变量,减少一个可能是错误的东西。