【问题标题】:C memory sharing problemsC 内存共享问题
【发布时间】:2012-03-09 17:51:40
【问题描述】:

我正在编写一个共享内存程序,该程序一方面将创建一块内存并向其中写入一个结构,然后从另一个程序中读取该结构。我的问题是我似乎不能只将一个简单的变量复制到结构中而不会出现分段错误,更不用说将结构复制到共享内存中。谁能帮我一点忙。谢谢

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


}

【问题讨论】:

  • pdata 在最后一行似乎未初始化。

标签: c memory struct


【解决方案1】:

你是说

size_t sizeOfCompanyInfo = sizeof(*pdata);

这是pdata指向的大小

【讨论】:

  • 谢谢。你能告诉我为什么我在结构中添加一个值
  • harald 的答案是正确的模式 - pdata 设置为指向一块内存,然后您将其视为指向结构的指针,并复制各个值 - 您可能打算设置共享价格也。
【解决方案2】:

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。它同样具有可读性,减少了变量和可能出错的事情。

【讨论】:

  • 我仍然遇到分段错误
  • 及其来自这两行
  • struct companyInfo * pdata = NULL;
  • strcpy(pdata->companyName, "sdfsd");
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 2019-10-22
  • 2014-08-14
相关资源
最近更新 更多