【问题标题】:Error of reading character from string从字符串中读取字符的错误
【发布时间】:2017-05-08 01:38:02
【问题描述】:

我定义了一个这样的结构

typedef struct movieinfo {
    string name;
    double grade;     //
    int duration;     //
    string type;      //
    int starttime[10];
    int time;         //
    int place[10];    //
    int price;        //
    int ttlTickets[10]; //
    int rmnTickets[10]; //
}movieInfo[10];

当我初始化前两个电影信息时,它可以正常工作。当我尝试以与前两个相同的方式分配第三个电影信息时,就会出现问题。

并且说0x处发生了未处理的异常.....,读取0x处发生访问冲突.....(我是从母语翻译过来的,不准确的请忽略。)

在我更改结构的成员之前,问题并不存在。我想知道是否是导致异常的结构的大小。

PS:我正在使用这样的结构作为共享内存:

HANDLE hMap = CreateFileMapping(
    INVALID_HANDLE_VALUE,
    NULL,
    PAGE_READWRITE,
    0,
    sizeof(movieInfo),
    "movie");

LPVOID pData = MapViewOfFile(
    hMap,
    FILE_MAP_WRITE,
    0,
    0,
    sizeof(movieInfo));

if (pData != NULL) {
    ZeroMemory(pData, sizeof(movieInfo));
}

movieInfo *mi = reinterpret_cast<movieInfo*>(pData);

【问题讨论】:

  • movieInfo 是 10 个 movieinfo 的数组。 mi 是一个指向 10 个 movieinfos 的数组的指针。 (不是指向 10 数组的第一个结构的指针)。我猜你可能会在你的代码中执行类似mi[1] 的操作,然后访问映射空间的边界(尝试访问第二批 10 个结构)。如果您在最后一行使用movieinfo 而不是movieInfo,它可能会起作用。
  • 我建议 (a) 使用更好的变量名称,(b) 不要使用数组类型定义,(c) 发布 MCVE。目前,您要求我们推测您可能在其余代码中犯了哪些您没有费心发布的错误。
  • @M.M 非常感谢您的有用建议!这是我最后一次使用数组 typedef。

标签: c++ windows shared-memory


【解决方案1】:

0x... 错误是由于试图从不在程序内的内存位置访问变量。初始化数组的方式或将结构归零的方式有问题(由于 mapViewOfFile() 中的错误)

【讨论】:

  • 是的!主要是我没有正确使用typedef。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-30
  • 2014-03-29
  • 1970-01-01
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
  • 2015-04-07
相关资源
最近更新 更多