萍水拾光 2023-10-08 14:08 采纳率: 50%
浏览 12
已结题

**_Mylast** 是 0x8的问题

在调试一个游戏源码的时候发现一个问题,就是通过void *转换成含有vector成员的类指针时,debug环境下vector内部报错,类似代码如下:

class testInfo
{
public:
    testInfo() {}
    ~testInfo() {}
    std::vector<int> m_vecTest;
};

int main()
{
        //为了说明问题及简化代码,这里不直接new testInfo,实际逻辑并非这样,游戏源码有个类专门负责申请内存,返回PVOID(void *),
        //再由各个模块强制转换成对应模块(对应这里的额testInfo)
    PVOID    pBuffer = (PVOID)new BYTE[1024];
    memset(pBuffer, 0, 1024);
    testInfo* testvec = (testInfo*)pBuffer;
    for (int i = 0; i < 10; ++i)
    {
        testvec->m_vecTest.push_back(i);//debug下此处报错
    }
    return 0;
}

报错如下图所示

img


经过调试发现_Myproxy为NULL,m_vecTest没有进入构造函数,网上查资料说,使用memset,会破坏vector的结构,注释掉掉memset,报如下错误:

img


应该还是构造的问题,不知如何处理?

  • 写回答

1条回答 默认 最新

  • 真相重于对错 2023-10-08 14:41
    关注

    这么写是违背c++原则的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月16日
  • 已采纳回答 10月8日
  • 创建了问题 10月8日