问题标签 [free]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 在 atexit() 中释放
在 atexit() 函数中释放内存有什么意义吗?
我有一个全局变量,在启动后会被 malloc'ed。我可以编写一个 atexit() 函数来释放它,但是当程序退出时系统不会回收所有内存吗?
自己整理并积极清理有什么好处吗?
windows - 内存释放例程是否触及被释放的块?
Windows HeapFree、msvcrt free:它们是否会导致被释放的内存被分页?我试图估计在退出时不释放内存是否会显着加速应用程序关闭。
注意:这是一个非常具体的技术问题。这与应用程序是否应该free
在退出时调用无关。
c - 从错误返回后释放内存的最佳方法是什么?
假设我有一个为调用者分配内存的函数:
如果第二个 malloc() 失败,我想听听您对 free() 分配内存的最佳方式的反馈。你可以想象一个更复杂的情况,有更多的错误退出点和更多的分配内存。
c# - C#数据分配问题
我有以下问题。我有一个 C++ dll,包含函数
然后我有一个类的 C# dll
//函数Free()看起来像:
我从 C# 应用程序中将其称为
问题是,一段时间后,C# 应用程序因 SystemAccessViolationExcetpion 而崩溃。你知道问题出在哪里吗?
为了更清楚:C# aaplication 可以完成某些类型的输入,而其他类型的输入会崩溃,所以我不认为调用约定有问题,是吗?
c - 为什么我必须在指针上使用 free 而不是普通声明?
为什么我在声明指针时必须使用 free(),例如:
但不是当我这样做时:
c - 当您在程序终止之前在 malloc 之后不释放时,真正会发生什么?
我们都被教导必须释放每个分配的指针。不过,我有点好奇不释放内存的实际成本。在某些明显的情况下,例如在malloc()
循环或线程执行的一部分中调用时,释放非常重要,因此不会出现内存泄漏。但请考虑以下两个示例:
首先,如果我有这样的代码:
这里的真正结果是什么?我的想法是进程死了,然后堆空间无论如何都消失了,所以错过调用并没有什么坏处free
(但是,我确实认识到无论如何都有它对于关闭、可维护性和良好实践的重要性)。我的这个想法是对的吗?
其次,假设我有一个有点像 shell 的程序。用户可以声明变量aaa = 123
,这些变量存储在一些动态数据结构中供以后使用。显然,很明显您会使用一些会调用某些 *alloc 函数(散列图、链表等)的解决方案。对于这种程序,调用后释放是没有意义的,malloc
因为这些变量必须在程序执行期间始终存在,并且没有好的方法(我可以看到)用静态分配的空间来实现它。分配一堆内存但仅作为进程结束的一部分释放是不是糟糕的设计?如果是这样,有什么替代方案?
c - 在 C 中释放内存的模式?
我目前正在开发一个基于 C 的应用程序,有点坚持以非反模式方式释放内存。我是一个内存管理爱好者。
我的主要问题是我在各种不同的范围内声明内存结构,这些结构通过引用其他函数来传递。其中一些函数可能会抛出错误并退出()。
如果我 exit() 在一个范围内,但并非所有数据结构都在该范围内,我该如何释放我的结构?
我觉得我需要将它全部包装在一个伪异常处理程序中并让处理程序处理释放,但这仍然看起来很丑陋,因为它必须知道我可能需要或可能不需要释放的所有内容......
c - 如果不使用 malloc 的块会怎样?
考虑以下 C 代码:
这将出现段错误,因为您正在尝试释放 c,这不是以前 malloc'ed 的东西。我的问题是我刚刚分配的块会发生什么?显然 c 不再指向它,所以它不能被使用,但它仍然被认为是“空闲”列表的一部分,或者这是一个显式的内存泄漏?
c - How to free dynamic allocated variable by SIGTERM?
I work on code something like this
When process is forked, all variables are cloned too. In regular case all copies of var are freed.
If there is error by fork()
, I send signal SIGTERM to all created processes. And I need to write signal handler for SIGTERM which free var and terminate application. However, free() is not signal safe function
-- so I shouldn`t call it. But how to free() that variable?
A lot of thanks for your answers...
EDIT: valgrind also shows still reacheable variable:
c - malloc() 和 free() 在哪里存储分配的大小和地址?
在哪里存储分配的地址及其大小(Linux GCC)malloc()
?free()
我读过一些实现将它们存储在实际分配的内存之前的某个地方,但我无法在我的测试中确认这一点。
背景,也许有人对此有另一个提示:
我正在尝试分析一个进程的堆内存,以确定另一个进程中字符串的当前值。访问进程堆内存并浏览它是没有问题的。但是,由于字符串的值发生变化,并且进程每次都分配新的内存部分,因此字符串的地址发生了变化。因为字符串具有固定格式,仍然很容易找到,但经过一些更改后,字符串的旧版本仍然在堆内存中(可能已释放,但仍未重用/覆盖),因此我无法判断哪个字符串是当前字符串。
因此,为了仍然找到当前的字符串,我想通过将其地址与地址进行比较malloc()
并free()
了解是否仍在使用我在内存中找到的字符串。
ciao,埃尔玛