c++ - 删除在另一个共享库中分配的指针

标签 c++ shared-libraries delete-operator

更新(已解决):好吧,我是个十足的白痴!原来在我的主程序的“用数据做事”部分我最终增加了指针,所以删除显然不起作用!哦!

所以我正在编译一个共享库,它的功能类似于这个(超简化 View ),这个库也是我的-所以我知道数据是如何分配的:

// inside library

void* getData(int size) { // with other parameters

    UINT8* data = new UINT8[size];  // where typedef uint8_t  UINT8; for gcc

    // do a socket read, where data is the buffer
    blockingRead (someSocket, data, propertySize); 

    return (void*) data;
}

它必须返回一个 void 指针,因为数据可以是一个结构(因此可以转换为该结构)。

问题是,我在我的主程序中使用了这个指针,我想在用完后删除它。如果我在我的主程序中这样做:

// inside main program
char* data = (char*) Library::getData(5);
// do stuff with data

delete[] data; // crashes with:
// *** glibc detected *** core: free(): invalid pointer: 0x00002aaab007bca4 ***

我想也许我应该在共享库中删除它:

// inside library

void disposeData(void* data) {  // call this from main program
    delete[] (UINT8*) data; // cast it back to the original type of pointer
}

但我仍然遇到同样的崩溃!如果我不删除,一切都很好,但我不希望我的程序出现不必要的内存泄漏。

我可能在某个地方做了一些愚蠢的事情 - 请帮助我找出我的方式中的错误!

编辑:正如评论中所指出的,上面的代码似乎有效——我将不得不看看是什么具体导致了我的代码中的错误。

最佳答案

您是否尝试过使用 valgrind ?使用 valgrind 将帮助您查明各种内存管理错误,这些错误可能是问题的原因。您看到的错误看起来像是堆损坏(正如@nos 所说,可能在 do stuff 部分),或者您实际上并没有释放最初分配的同一个对象。

关于c++ - 删除在另一个共享库中分配的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4651792/

相关文章:

c++ - 如何在 `C++17` 中调用重载对齐的 new 和 delete 运算符?

c++ - 在加载的共享库中捕获异常

c++ - 在堆栈上分配的变量上调用 delete

c++ - 如何访问内存映射 USB 主机 Controller 寄存器?

c++ - 字符转QString

java - 低功耗蓝牙 Java Api 或 C/C++ 库

c++ - C语言求结构体的大小

c++ - 在共享库中创建线程是不好的做法吗?

c - .so : undefined reference to 'min'

删除对象时出现 C++ 断言错误