I have a problem, that when I try to delete manually allocated pointer, it causes SIGABRT, I can't get to the roots of the cause. The class looks like
class StreamMetadataReader {
protected:
std::ifstream csvFile;
std::vector<std::string> header;
public:
bool openFile(const std::string& path);
};
The object is created manually allocating memory using new
operator and stored in a third party library memory:
auto* reader = new StreamMetadataReader;
vxSetNodeAttribute(
node, VX_NODE_ATTRIBUTE_LOCAL_DATA_PTR, (void *) &reader, sizeof(StreamMetadataReader *)
);
And the pointer address is passed around functions during program execution. I can cast the address to object type and use it properly. At the end of the program, I retrieve the pointer for the last time and call delete operator to free the memory like so:
StreamMetadataReader *reader = nullptr;
vxQueryNode(
node, VX_NODE_ATTRIBUTE_LOCAL_DATA_PTR, (void *) &reader, sizeof(StreamMetadataReader *)
);
if (reader != nullptr) {
delete reader;
}
So the debugger says that execution stops when the default destructor tries to free std::vector<std::string> header;
object member.
Maybe someone has an idea what is wrong here? I know this is not the best practice solution for this exact problem. Maybe I this could be a use case for some sort of smart pointer (e.g. weak pointer)?
Thanks in advance.
Thanks everyone for your help, I have only recently solved my problem, and that was that I had wrong defines
in my project, and that caused my program to be compiled with slightly different headers than the shared library I used. The library I used had precompiler conditions to declare structure members. That caused memory corruption and errors appeared spuriously everywhere.