memory-leaks 相关问题

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

Swift Concurrency 中的 withCheckedContinuation 和 [weak self]?

代码示例: func someAsyncFunc() 异步 { 加载任务?.cancel() 返回等待withCheckedContinuation { [弱自我]checkedContinuation in 守卫让自己别人{ ...

回答 2 投票 0

位于静态变量上的 Malloc 内存分配指针被自动释放还是真的存在泄漏?

考虑这个案例: 使用macosleaks-atExit--有这样的代码: #包括 int 主函数(无效) { char *泄漏 = malloc(100); 返回(0); } 这自然是泄漏...其中“我...

回答 1 投票 0

我正在泄漏内存,但不知道为什么

这是我第一次在这里提问:)) 我目前正在编写一个创建树的函数(只是为了熟悉我迄今为止学到的 C 语法)。不过,它工作得很好,

回答 1 投票 0

自我调度功能中的词汇环境和记忆

这种代码是否存在内存泄漏: 令 n = 0; 函数 foo() { const str = '...长字符串' + (++n); 设置立即(()=> { console.log('str=' + str); foo(); ...

回答 1 投票 0

RabbitMQ 内存使用情况

我目前在生产中使用 Ubuntu(16.04) 上的 RabbitMQ (3.6.2-1)。生产者发布消息,消费者消费消息,一切正常,但有时 RabbitMQ 不...

回答 2 投票 0

一个关于C++程序内存泄漏的问题

我收到了这段代码作为作业,其中一个问题是:程序中会不会出现内存泄漏,因为MyList的析构函数释放了节点但没有释放数据。 是否

回答 1 投票 0

如何使用_CrtDumpMemoryLeaks生成的信息生成文件

我正在尝试实现基于CRT调试工具的日志文件创建,到目前为止我已经生成了一个带有一些泄漏的简单文件,只是为了看看它是如何工作的。 #include“OtherSource.h” #

回答 1 投票 0

使用 RefCell 和 Rc 处理循环图中的内存泄漏

我按照 https://ricardomatins.cc/2016/06/08/interior-mutability 中提到的方法使用 Rc 和 RefCell 在 Rust 中创建图形。 类型 NodeRef = Rc 我遵循 https://ricardomatins.cc/2016/06/08/interior-mutability 中提到的方法,使用 Rc 和 RefCell 在 Rust 中创建图形。 type NodeRef<i32> = Rc<RefCell<_Node<i32>>>; #[derive(Clone)] // The private representation of a node. struct _Node<i32> { inner_value: i32, adjacent: Vec<NodeRef<i32>>, } #[derive(Clone)] // The public representation of a node, with some syntactic sugar. struct Node<i32>(NodeRef<i32>); impl<i32> Node<i32> { // Creates a new node with no edges. fn new(inner: i32) -> Node<i32> { let node = _Node { inner_value: inner, adjacent: vec![] }; Node(Rc::new(RefCell::new(node))) } // Adds a directed edge from this node to other node. fn add_adjacent(&self, other: &Node<i32>) { (self.0.borrow_mut()).adjacent.push(other.0.clone()); } } #[derive(Clone)] struct Graph<i32> { nodes: Vec<Node<i32>>, } impl<i32> Graph<i32> { fn with_nodes(nodes: Vec<Node<i32>>) -> Self { Graph { nodes: nodes } } } 我认为这种方法在循环图的情况下会导致内存泄漏。我该如何解决这个问题? 您不必阅读博客文章即可找到答案,只需阅读文档: Rc指针之间的循环永远不会被释放。因此,Weak 用于打破循环。例如,一棵树可以具有从父节点到子节点的强 Rc 指针,以及从子节点返回到其父节点的 Weak 指针。 另请参阅: 有没有一种方法可以在没有运行时开销的情况下构建具有循环链接的结构? 在 Rust 中实现类图数据结构 Rust 中的递归数据结构 Rust 并不是为具有任意反向链接的编程结构(例如图形)而设计的。您可能会寻求自己进行释放,以便可以保留任意边缘。幸运的是,Rust 足够灵活,可以几乎无缝地满足您的场景。 这是一种可能的解决方案。 首先,定义两个宏用于将原始指针转换回借用指针: // Given a class or array pointer, transforms it to a mutable reference #[macro_export] macro_rules! modify { ($ptr:expr) => { (unsafe { &mut *$ptr }) } } // Given a class or array pointer, transforms it to a read-only reference #[macro_export] macro_rules! read { ($ptr:expr) => { (unsafe { &*$ptr }) } } 然后,修改引用,使其成为真正的指针。我在下面添加方法来检查它是否为空,但如果您愿意,也可以使用选项类型。请注意,我将您的类型参数从 i32 更改为 I,因为类型参数大写更符合习惯。 type NodeRef<I> = *mut _Node<I>; pub fn NullNodeRef<I>() -> NodeRef<I> { std::ptr::null_mut() } pub fn IsNullNodeRef<I>(node: NodeRef<I>) -> bool { node.is_null() } 现在您可以使用相同的布局重写节点结构: #[derive(Clone)] // The private representation of a node. struct _Node<I> { inner_value: I, adjacent: Vec<NodeRef<I>>, } #[derive(Clone)] // The public representation of a node, with some syntactic sugar. struct Node<I>(NodeRef<I>); 要创建节点,您需要在堆上分配它,这样您就可以检索到稳定的地址,并且 Rust 不会释放它。 impl<I> Node<I> { // Creates a new node with no edges. pub fn new(inner: I) -> Node<I> { let node_ref = Box::into_raw(Box::new(_Node { inner_value: inner, adjacent: vec![] })); Node(node_ref) } 作为奖励,我添加了一个函数来检查一个节点是否是另一个节点的邻居,以演示宏的使用read!(): pub fn is_pointing_to(self, other: &Node<I>) -> bool { let this_node = self.0; let other_node = other.0; read!(this_node).adjacent.contains(&other_node) } 您可以使用 add_adjacent 宏方便地重写原始函数 modify!()。请注意,不再需要克隆引用,因为引用具有复制语义。 // Adds a directed edge from this node to other node. pub fn add_adjacent(&mut self, other: &Node<I>) { modify!(self.0).adjacent.push(other.0); } } 现在您可以定义图表,但到目前为止它只拥有地址,而不拥有对象本身。因此,您需要实现 Drop 特征,以便您可以手动释放内存: #[derive(Clone)] struct Graph<I> { nodes: Vec<Node<I>>, } impl<I> Graph<I> { fn with_nodes(nodes: Vec<Node<I>>) -> Self { Graph { nodes: nodes } } impl <I> Drop for Graph<I> { fn drop(&mut self) { for node in &self.nodes { unsafe { drop(Box::from_raw(node.0)); } } } } } 免责声明:手动管理内存很容易出错,除非必要,否则我不建议这样做。 我发明这些宏是因为我负责将代码生成器从 Dafny 编写到 Rust,而 Dafny 是一种安全的语言,没有所有权的概念,但可以安全地释放。因此,我生成的代码将使用所有这些宏,但以可证明安全的方式。手动使用它们的风险和收益由您自行承担。 但是,通过这种方法,您可以避免任何内存泄漏。

回答 2 投票 0

由于SetInterval中使用了useState,内存使用量不断增加

我设置了一个计时器,每x秒运行一次,并将其添加到UseEffect内容中。在内部,我更新了 useState 元素,该元素每 x 秒更新一次。 虽然过程不是很

回答 1 投票 0

C# AForge 巨大的内存消耗

经过大量研究后,我向您寻求帮助,因为我不知道该怎么办了。我正在使用 AForge VideoCaptureDevice 在图片框中显示相机。不过内存消耗相当高...

回答 2 投票 0

MariaDB 在作业完成后不释放 RAM

每当我运行作业写入 MariaDB 中的数据库时,都需要 RAM 来执行该操作。然而,即使作业完成后(并且我可以成功查询数据库),RAM 仍然

回答 1 投票 0

这是确保取消订阅 Xamarin Prism 订阅的适当方法吗?

我有一个 Xamarin/Prism 应用程序(不是我的代码),它具有各种事件订阅和许多内存泄漏。我认为内存泄漏之一与这些事件订阅有关。这是...

回答 1 投票 0

我的 Android 应用程序代码暴露了 Android RAM 中的纯文本数据,攻击者可以窃取这些数据

安全测试人员报告了一个错误。据他们称,攻击者可以附加调试器并从应用程序中转储内存,或者加载内核模块以转储 RAM 的全部内容。” @

回答 1 投票 0

C 程序中的内存泄漏

我正在学习C编程。作为一个新手,我不得不说这门语言真的很难,尤其是内存管理。我以前用Java和Python编程,你不用担心内存问题

回答 1 投票 0

如何在长期运行的 golang 进程中查找内存泄漏

一种方法可能是: 识别仍在运行的 goroutine 显示超过 10 分钟未执行任何代码的代码或其他代码 告诉我 goroutine 所在的文件/行号

回答 1 投票 0

使用free时内存使用量没有减少?

不知何故,对 free() 的调用不起作用。我在 Windows 上运行此应用程序并跟踪任务管理器中的内存使用情况,但在调用 free() 后发现内存使用量没有减少。 int主要...

回答 3 投票 0

Spring Boot 与 JPA 增加内存使用量

我正在使用 Spring Boot Web 应用程序运行 JPA 教程代码。 我的 POM 是 我正在使用 Spring Boot Web 应用程序运行 JPA 教程代码。 我的 POM 是 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>xxx</modelVersion> <groupId>xxxx</groupId> <artifactId>xxx</artifactId> <version>xxx</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> <relativePath /> </parent> <properties> <start-class>com.Main</start-class> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc --> <dependency> <groupId>javax.inject</groupId> <artifactId>javax.inject</artifactId> <version>1</version> </dependency> <dependency> <groupId>javax.persistence</groupId> <artifactId>javax.persistence-api</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>eclipselink</artifactId> <version>2.6.3</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <scope>runtime</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> 我只坚持一门课: @Entity @JsonInclude(Include.NON_NULL) public class TransactionData { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(unique=true) private String referenceId; public String getReferenceId() { return referenceId; } public void setReferenceId(String referenceId) { this.referenceId = referenceId; } 我的应用程序属性是: spring.datasource.url= jdbc:sqlserver://xxx.xxx.xxx.xxx:xxxx;databaseName=xxxxxx spring.datasource.username= xxx spring.datasource.password= xxx spring.jpa.hibernate.dialect=org.hibernate.dialect.SQLServerDialect spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=update 休息控制器: @Autowired TDataService tDataService; @RequestMapping("/initTx") @ResponseBody public String initTx(String atmId, String refId) { TransactionData tD=new TransactionData(); tD.setReferenceId(refId); return tDataService.save(tD).getReferenceId(); } 服务: @Autowired TDataRepo repository; public TransactionData save(TransactionData tData) { return repository.save(tData); } 存储库: public interface TDataRepo extends JpaRepository<TransactionData, Long> Repository 实现了 JpaRepository 中提供的 save 方法,无需修改。 一旦我使用Web应用程序启动tomcat,我就会执行简单的负载压力测试。我正在对控制器运行 1000 个休息调用,一次创建 1 个到 dB 的插入。通话之间有 1 秒延迟。 测试过程中,RAM不断增加,这是预料之中的,但从未释放。完成这些 1k 插入后,我不会向 Web 控制器发送任何请求,但 ram 保持不变,永远不会下降到原始空闲值。 我在这里遗漏了一些重要的东西吗? 我不认为那里存在“内存泄漏”。我认为这与JVM如何管理内存有关。简而言之,它不会立即将未使用的内存返回给操作系统。您可以在这里找到一些提示GC是否将内存释放给操作系统?

回答 1 投票 0

如何监控golang websocket服务器内存泄漏

现在我几乎正在这样做: 进口 ( “不安全” ) func (s *Service) logStats(){ 去函数(){ 为了 { 时间.睡眠(50*时间.秒...

回答 1 投票 0

C 程序存在内存泄漏

我在C中做了一个名为strremovestr的函数来从字符串中删除子字符串,但是存在内存泄漏。 #包括 #包括 #包括 字符* strrem...

回答 1 投票 0

C++运算符重载语法混乱和内存泄漏

我想为矩阵及其运算制作一个矩阵库,但它有内存问题,然后我决定制作运算符 ovarloading 以避免内存泄漏。 = 运算符重载不适用于

回答 1 投票 0

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