我有一个问题,当我尝试删除手动分配指针时,它会导致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
错误,这导致我的程序的编译与标题略有不同我使用的共享库。我使用的库具有宣布结构成员的预编译器条件。这导致记忆损坏和错误在任何地方出现。