【问题标题】:C++ struct access violationC++ 结构访问冲突
【发布时间】:2015-09-27 13:27:30
【问题描述】:

我在头文件中定义了以下结构:

typedef struct _wfs_cdm_physicalcu
{
    LPSTR           lpPhysicalPositionName;
    CHAR            cUnitID[5];
    ULONG           ulInitialCount;
    ULONG           ulCount;
    ULONG           ulRejectCount;
    ULONG           ulMaximum;
    USHORT          usPStatus;
    BOOL            bHardwareSensor;
} WFSCDMPHCU, * LPWFSCDMPHCU;

在我的代码文件中,我尝试像这样使用它:

LPWFSCDMPHCU cdm_physical_cass;
strcpy(cdm_physical_cass->cUnitID, "1234");
cdm_physical_cass->lpPhysicalPositionName = "DISP1";
cdm_physical_cass->bHardwareSensor = FALSE;
cdm_physical_cass->ulInitialCount = 100;

代码编译得很好,但是我在那个 strcpy 上遇到了访问冲突,所以我认为结构没有正确初始化。 有什么想法吗?

【问题讨论】:

  • 下次制作真正的 MCVE。然后你至少会知道不是@​​987654324@ 是真正的罪魁祸首。 stackoverflow.com/help/mcve
  • 匈牙利符号恐怖:-P。也不要使用_ 作为前缀。这是为标准实现保留的。

标签: c++ struct


【解决方案1】:

cdm_physical_cass 未初始化/分配。 你必须打电话

LPWFSCDMPHCU cdm_physical_cass = new WFSCDMPHCU;

最好使用智能指针(如std::unique_ptr)。

【讨论】:

  • 谢谢,它成功了。我之前尝试过,但像这样: LPWFSCDMPHCU cdm_physical_cass = new LPWFSCDMPHCU;有什么区别?
  • LPWFSCDMPHCUWFSCDMPHCU*
【解决方案2】:

LPWFSCDMPHCU cdm_physical_cass; 不是结构,它是指向WFSCDMPHCU 类型结构的指针。您必须为cdm_physical_cass 指向的结构分配内存。推荐使用WFMAllocateBuffer函数。

【讨论】:

    【解决方案3】:

    由于 LPWFSCDMPHCU 是指针而不是 struct ,因此您需要为该指针 ( LPWFSCDMPHCU ) 分配内存(malloc 或 new 取决于语言),然后您才能使用这些字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-23
      • 2021-05-11
      • 1970-01-01
      • 2018-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多