当我尝试使用 xerces“Visual Studio 2010”释放内存时我的项目崩溃了

发布于 2024-12-21 06:42:22 字数 328 浏览 1 评论 0原文

我正在一个项目中工作,并且使用 xerces 库。当我尝试删除指针时,我的项目崩溃了。

这是源代码:

std::ostream& operator<<(std::ostream& target, const DOMString& s)
{
char *p = s.transcode(); // method from xerces
target << p;
delete [] p;

return target;
}

此方法在 Visual Studio 6 中运行良好(我正在尝试在 2010 年构建)。

I'm working in a project and I use the xerces library. When I try to delete a pointer my project crashes.

Here is the source code:

std::ostream& operator<<(std::ostream& target, const DOMString& s)
{
char *p = s.transcode(); // method from xerces
target << p;
delete [] p;

return target;
}

This method works fine in Visual Studio 6 (I'm trying to build in 2010).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ˉ厌 2024-12-28 06:42:22

来自 xerces 文档

注意:返回的缓冲区是动态分配的,并且是
调用者有责任在不再需要时将其删除。你
可以调用 XMLString::release 来释放这个返回的缓冲区。

看起来 xerces 使用 new[] (可能是 malloc 或某些自定义分配器)来分配缓冲区。保证缓冲区安全释放的唯一方法是:XMLString::release

From the xerces docs:

NOTE: The returned buffer is dynamically allocated and is the
responsibility of the caller to delete it when not longer needed. You
can call XMLString::release to release this returned buffer.

It seems that xerces allocates the buffer not with new[] (perhaps malloc or some custom allocator). The only way to guarantee that the buffer safely gets deallocated is with: XMLString::release

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文