问题标签 [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 - C 编程:调用 free() 出错?
这是对我之前的问题的跟进。链接在这里。
我的问题是:假设我有以下代码..
我想要得到的是 - 如果发生错误read()
怎么办?这是否意味着我分配的内存永远不会被释放?如果是这种情况,我该如何处理?我应该free()
作为错误处理的一部分调用吗?
再次,我为糟糕的英语道歉。^^;
非常感谢,K。
linux - linux new/delete, malloc/free 大内存块
我们有一个运行许多 CORBA 服务器进程的 linux 系统(kubuntu 7.10)。服务器软件使用 glibc 库进行内存分配。linux PC有4G物理内存。出于速度原因,交换被禁用。
在接收到处理数据的请求后,其中一个服务器进程分配一个大数据缓冲区(使用标准 C++ 运算符“new”)。缓冲区大小取决于许多参数,但通常约为 1.2G 字节。它可以达到大约 1.9G 字节。请求完成后,使用“删除”释放缓冲区。
这适用于分配相同大小的缓冲区的多个连续请求,或者如果请求分配的大小比前一个小。内存似乎是空闲的 - 否则缓冲区分配尝试最终会在几个请求后失败。在任何情况下,我们都可以看到使用 KSysGuard 等工具为每个请求分配和释放缓冲区内存。
当请求需要比前一个更大的缓冲区时,就会出现问题。在这种情况下,operator 'new' 会引发异常。就好像从第一次分配中释放的内存无法重新分配,即使有足够的可用物理内存。
如果我在第一次操作后终止并重新启动服务器进程,则第二次请求更大的缓冲区大小会成功。即终止进程似乎将释放的内存完全释放回系统。
任何人都可以解释这里可能发生的事情吗?可能是某种碎片或映射表大小问题吗?我正在考虑用 malloc/free 替换 new/delete 并使用 mallopt 来调整内存释放到系统的方式。
顺便说一句 - 我不确定它是否与我们的问题有关,但服务器使用在每个处理请求上创建和销毁的 Pthreads。
c - 如果 free() 知道我的数组的长度,为什么我不能在我自己的代码中要求它?
我知道将动态分配的数组的长度传递给操作它们的函数是一种常见的约定:
但是,如果我无法从指针中获取分配内存的长度,那么free()
当我给它的所有指针都是相同的指针时,“自动”如何知道要释放什么?作为 C 程序员,为什么我不能参与其中?
从哪里free()
获得它的免费(har-har)知识?
c++ - 为什么 free(p) 不将 p 设置为 NULL?
为什么这不能成为标准行为的任何原因free()
?
指向同一个对象的多个指针:
malloc
来自要求的分配void*
反之亦然:
safefree()
要求投给void*&
(参考)
c - 关于 malloc 和 free 的帮助:检测到 Glibc:free(): invalid pointer
我需要帮助来调试这段代码。我知道问题出在 malloc 和 free 中,但找不到确切的位置、原因和方法。请不要回答:“使用 gdb”,仅此而已。我会使用 gdb 来调试它,但我仍然不太了解它,并且仍在学习它,同时希望有另一个解决方案。
谢谢。
c - 为什么我不应该在 malloc() 未分配的变量上调用 free()?
我在某处读到,用它free
来摆脱不是通过调用创建的对象是灾难性的malloc
,这是真的吗?为什么?
c - 堆栈内存上的 free()
我在 Solaris 上支持一些 c 代码,我看到了一些奇怪的东西,至少我认为是:
我的理解是,由于变量是本地数组,内存来自堆栈,不需要释放,而且由于没有使用 malloc/calloc/realloc,所以行为是未定义的。
这是一个实时系统,所以我认为这是在浪费周期。我错过了一些明显的东西吗?
c - `const char*` 会导致问题吗?
我可以free
用于const char*
吗?这会导致任何问题吗?
memory-management - 为什么垃圾收集语言中不允许使用 free()?
我正在阅读 Wikipedia 上的C#条目,并遇到:
托管内存不能显式释放;相反,它会自动被垃圾收集。
为什么在具有自动内存管理的语言中,甚至不允许手动管理?我可以看到在大多数情况下它是没有必要的,但是当你内存紧张并且不想依赖 GC 的智能时它会派上用场吗?
c++ - 如何在 C++ 中释放静态成员变量?
谁能解释如何释放静态成员变量的内存?据我了解,只有当类的所有实例都被销毁时,它才能被释放。在这一点上,我有点无助……
一些代码来解释它: