c 从范围删除对象的操作员导致崩溃dealloceLoceLoceLoceLoceLoceLoceLoceLoceL



我有一个问题,当我尝试删除手动分配指针时,它会导致sigabrt,我无法达到原因的根源。该课看起来像

class StreamMetadataReader {
protected:
    std::ifstream csvFile;
    std::vector<std::string> header;
public:
    bool openFile(const std::string& path);
};

使用new操作员手动创建对象,并存储在第三方库内存中:

auto* reader = new StreamMetadataReader;
vxSetNodeAttribute(
  node, VX_NODE_ATTRIBUTE_LOCAL_DATA_PTR, (void *) &reader, sizeof(StreamMetadataReader *)
);

和指针地址在程序执行过程中围绕函数传递。我可以将地址投放到对象类型并正确使用。在程序结束时,我最后一次检索指针,并致电删除操作员以释放内存:

StreamMetadataReader *reader = nullptr;
vxQueryNode(
    node, VX_NODE_ATTRIBUTE_LOCAL_DATA_PTR, (void *) &reader, sizeof(StreamMetadataReader *)
);
if (reader != nullptr) {
    delete reader;
}

因此,调试器说,当默认破坏者试图免费std::vector<std::string> header;对象成员时,执行会停止。

也许有人知道这里有什么问题?我知道这不是解决这个确切问题的最佳实践解决方案。也许我这可能是某种智能指针(例如弱指针)的用例?

预先感谢。

感谢大家的帮助,我最近才解决了我的问题,那就是我在项目中的defines错误,这导致我的程序的编译与标题略有不同我使用的共享库。我使用的库具有宣布结构成员的预编译器条件。这导致记忆损坏和错误在任何地方出现。

相关内容

  • 没有找到相关文章

最新更新