memory-leaks 相关问题

当程序无法释放已分配但不再使用且无法恢复的内存时,会发生内存泄漏。

使用指针作为函数的普通变量返回后如何删除指针

我看过类似的问题,但它们都假设返回类型也是一个指针。如果这措辞不好,我深表歉意,因为我对 C++ 有点陌生。 所以我有以下功能: //

回答 2 投票 0

为什么我不能“销毁”“自有”的CRTP向量,但仍然可以释放其地址?

摘自 Björn Fahller 在 2023 年 CPP 会议上的闪电演讲。 => youtu.be/LKKmPAQFNgE 这是关于如何在不接触 new 甚至 malloc 的情况下强制 c++ 泄漏内存。 结构 V:向量 摘自 Björn Fahller 在 2023 年 CPP 会议上的闪电演讲。=> youtu.be/LKKmPAQFNgE 这是关于如何在不接触 new 甚至 malloc 的情况下强制 C++ 泄漏内存。 struct V : vector<V> {}; auto v = V{}; v.emplace_back(); v.swap(v.front()); // v representation becomes uint64_t[3]{ 0x0, 0x0, 0x0}, // so the vector allocation gets lost because no refs are left on the scope. 所以我想知道是否可以手动销毁它。 struct V : vector<V> {}; auto v = V{}; v.emplace_back(); v.emplace_back(); v.emplace_back(); v.emplace_back(); auto front = v.front(); v.swap(v.front()); using allocator = std::allocator<V>; using atraits = std::allocator_traits<allocator>; auto a = front.get_allocator(); atraits::destroy(a, &front + 1); // Ok atraits::destroy(a, &front + 2); // Ok atraits::destroy(a, &front + 3); // Ok // atraits::destroy(a, &front); // error SIGSEGV atraits::deallocate(a, &front, 4); // still seems Ok? 当尝试销毁拥有自己地址的 V 对象时,会发生SIGSEGV。 0x1796320 : 0x1796320 (alloc_begin_ptr) // It owns itself!!! 0x1796328 : 0x1796380 (one_pass_content_end_ptr) 0x1796330 : 0x1796380 (one_pass_alloc_end_ptr) 0x1796338 : 0x0 (alloc_begin_ptr) 0x1796340 : 0x0 (one_pass_content_end_ptr) 0x1796348 : 0x0 (one_pass_alloc_end_ptr) 0x1796350 : 0x0 (alloc_begin_ptr) 0x1796358 : 0x0 (one_pass_content_end_ptr) 0x1796360 : 0x0 (one_pass_alloc_end_ptr) 0x1796368 : 0x0 (alloc_begin_ptr) 0x1796370 : 0x0 (one_pass_content_end_ptr) 0x1796378 : 0x0 (one_pass_alloc_end_ptr) 所以我尝试将其移至堆栈。看起来效果不错。 struct V : vector<V> {}; auto v = V{}; v.emplace_back(); v.emplace_back(); v.emplace_back(); v.emplace_back(); auto front = v.front(); v.swap(v.front()); auto v2 = std::move(front); 没有任何对象拥有自己。 0x7ffc44d02b20 : 0x927320 (alloc_begin_ptr) // v2 on stack 0x7ffc44d02b28 : 0x927380 (one_pass_content_end_ptr) 0x7ffc44d02b30 : 0x927380 (one_pass_alloc_end_ptr) 0x927320 : 0x0 (alloc_begin_ptr) 0x927328 : 0x0 (one_pass_content_end_ptr) 0x927330 : 0x0 (one_pass_alloc_end_ptr) 0x927338 : 0x0 (alloc_begin_ptr) 0x927340 : 0x0 (one_pass_content_end_ptr) 0x927348 : 0x0 (one_pass_alloc_end_ptr) 0x927350 : 0x0 (alloc_begin_ptr) 0x927358 : 0x0 (one_pass_content_end_ptr) 0x927360 : 0x0 (one_pass_alloc_end_ptr) 0x927368 : 0x0 (alloc_begin_ptr) 0x927370 : 0x0 (one_pass_content_end_ptr) 0x927378 : 0x0 (one_pass_alloc_end_ptr) 为什么拥有自身的 allocator_traits::destroy() 上的 vector 会触发 SIGSEGV ? // atraits::destroy(a, &front); // error SIGSEGV 0x1796320 : 0x1796320 (alloc_begin_ptr) // It owns itself!!! 0x1796328 : 0x1796380 (one_pass_content_end_ptr) 0x1796330 : 0x1796380 (one_pass_alloc_end_ptr) [直播] (我假设这一行: auto front = v.front(); 是一个拼写错误,因为 v.front() 是您从中复制的默认构造的 V 对象。这意味着该线本质上是auto front = V{}。你的意思是auto& front = v.front()) &front + 1、&front + 2和&front + 3是指向空向量的指针,这些可以被销毁。 如果您试图破坏 &front 指向的内容,则这是具有 4 个元素的向量。最后三个元素是那些空向量,被销毁是没有问题的。 但 front 的第一个元素是 front 本身。这是未定义的行为,因为您将在已经被销毁的对象上调用析构函数,但实际上它会导致无限循环,因为它只会再次调用析构函数并递归地尝试销毁相同的向量(以及堆栈溢出,从而导致段错误)。 如果您只是释放它,则不会调用析构函数,因此不会出现无限循环。如果向量保存了分配内存的其他向量,则可能会泄漏内存,因为这些向量的析构函数也不会被调用。 正如您所尝试的那样,“修复”此问题的方法是打破“所有权”循环,例如将其移动到新向量(V{} = std::move(front) / V{}.swap(front))。

回答 1 投票 0

为什么系统不能正确释放C和Rust程序的内存?但是C++程序好像没有问题

#包括 #包括 #包括 无效*线程函数(无效*参数){ char **记录 = malloc(1000000 * sizeof(char *)); 如果(记录== NULL){ ...

回答 1 投票 0

使用node-canvas生成多个图像时的内存泄漏问题

我使用画布生成大量图像,此过程在生成 5000 张图像时消耗 6GB RAM。不幸的是,处理完成后内存没有被释放。绝望...

回答 1 投票 0

具有动态 TableColumns 的 TableView 中的 JavaFX 内存泄漏

我使用的是jdk1.8.0_40 我想制作一个可以动态更改列的 TableView,但它会泄漏 Old/Tenured gen 中的内存并最终挂起 JVM。 这是一个简单的程序

回答 3 投票 0

MySql JDBC AbandonedConnectionCleanupThread 内存泄漏

我正在使用 springBoot Java 应用程序和 MySql 连接器最新版本:8.0.26('mysql-connector-java')。 更具体地说,它发生在 com.mysql.cj.jdbc.AbandonedConnectionCleanupThread 中。

回答 1 投票 0

Java(FX) 应用程序正在泄漏内存

我的 JavaFX (12) 应用程序似乎在 Windows 上泄漏内存:一晚后,该应用程序消耗了我的大部分 RAM。但是,这不会显示在任务管理器中 - 除非以某种方式...

回答 2 投票 0

如何解决Spring云网关内存泄漏

我在我的服务中使用Spring Cloud Gateway,并使用下面的RequestDecorator作为我的LoggingFilter中的包装器。 公共类 RequestDecorator 扩展 ServerHttpRequestDecorator { 私人决赛...

回答 1 投票 0

@State 中保存的多个闭包导致内存泄漏,并保留对 @StateObject 的引用

我在代码中遇到了非常奇怪的内存泄漏。这主要是由于使用@escaping闭包并嵌套该闭包引起的。我创建了最小的可重现示例来演示此内存泄漏。

回答 1 投票 0

小部件伴随对象中的 kotlin Lateinit - 泄漏警告

所以我对 kotlin 和 Android 还很陌生。 我写了一个应用程序,它完全按照我想要的方式工作,除了 它给了我一个编译器警告: '不要将 Android 上下文类放置在静态字段中; ...

回答 1 投票 0

ProviderScope 和 Riverpod 提供程序会从内存中删除吗?

我很困惑 Nested ProviderScope 和所有 Provider 是否会从内存中删除?遵循用例是好的实践还是坏的实践? 我有 idsProvider 最终 idsProvider = Provider((_) =&...

回答 1 投票 0

Gin Gonic 网络服务器内存泄漏?

描述 我在 gin-gonic/gin Web 服务器中遇到了潜在的内存泄漏。我尝试通过创建一个简单的 /health_check 端点来复制该问题。端点 /health_check 已命中

回答 1 投票 0

Redis 对 cgroupv1 和 cgroupv2 的支持

我希望我为我的问题选择了正确的位置。首先我应该说我是 redis、kubernetes 等方面的新手:( 我有一些运行我们的应用程序的 Azure Kubernetes 集群。我们正在使用

回答 1 投票 0

在 Angular 中处理 API 请求的订阅内存泄漏

当我开始使用 Angular 时,我工作场所的某人告诉我在 RxJ 中使用可观察量执行 API 调用时使用 take(1),声称它会在一次 API 调用后自动取消订阅。 所以我

回答 1 投票 0

Tomcat 没有完全停止

我无法停止 Windows 服务器上的 Tomcat 服务;它显示停止。我必须从任务计划程序中手动终止该进程。如何解决这个问题? 我收到以下错误...

回答 1 投票 0

如何在 MAUI Shell 应用程序中使用 Navigation.PushAsync() 后释放内存?

当我使用 Navigation.PushAsync() 推送内容页面后从导航堆栈中弹出内容页面时,我在 Shell 应用程序中遇到了内存未释放的问题。每次我创建一个新页面时,p...

回答 1 投票 0

使用指定内存构造对象并使用free(mem)释放,导致内存泄漏

有一段代码片段使用指定的内存构造一个对象,如图所示。当我使用 free(mem) 释放指定的内存时,我注意到 Node c 的析构函数...

回答 1 投票 0

npm install module -g 给出 MaxListenersExceededWarning

使用: 节点12.9.0 npm 6.10.2 macOS 莫哈维 正在遵循在线教程,该教程教初学者如何通过发出 -g 标志来全局安装 npm 模块: myapp$ npm 我[email protected] -g

回答 2 投票 0

在 Linux 中的 getgrnam 和 getgrnam_r 中观察到内存泄漏

我正在尝试使用一些基本的 C 代码检索 linux 组,但是 getgrnam 和 getgrnam_r 都遇到内存泄漏。仅当 /etc/gro 中缺少 linux 组时才会发生内存泄漏...

回答 1 投票 0

哪部分代码在 hackerrank 中造成分段错误?

我正在尝试在 hackerrank 中解决这个问题。 https://www.hackerrank.com/challenges/circular-array-rotation/problem 其他所有测试都很好,但有一个测试正在创建分段错误。这是...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.