Questions tagged «free»

free是用于释放从malloc和C中其他函数获得的内存的函数。请勿使用此标记引用自由软件。在Stack Overflow上没有主题来寻求软件推荐。如果您对自由软件有疑问,可以在这里提出:https://softwarerecs.stackexchange.com/

17
当您在malloc之后不释放时,真正发生了什么?
多年来,这一直困扰着我。 我们都在学校里受教(至少在我以前是这样),您必须释放分配的每个指针。但是,对于不释放内存的实际成本,我有点好奇。在某些明显的情况下,例如在malloc循环或线程执行的一部分内调用when时,释放非常重要,这样就不会发生内存泄漏。但是,请考虑以下两个示例: 首先,如果我有这样的代码: int main() { char *a = malloc(1024); /* Do some arbitrary stuff with 'a' (no alloc functions) */ return 0; } 真正的结果是什么?我的想法是该过程终止,然后无论如何堆空间都消失了,因此错过该调用不会有任何危害free(但是,我的确意识到无论如何对于关闭,可维护性和良好实践而言,保持它的重要性)。我的想法对吗? 其次,假设我有一个程序有点像shell。用户可以声明类似的变量,aaa = 123并将这些变量存储在某种动态数据结构中以备后用。显然,显然您会使用一些可调用* alloc函数的解决方案(哈希映射,链接列表等)。对于这种程序,调用后永远释放是没有意义的,malloc因为这些变量必须在程序执行期间始终存在,并且没有很好的方法(我可以看到)用静态分配的空间来实现。分配一堆但仅在进程结束时释放的内存是不好的设计吗?如果是这样,还有什么选择?
538 c  malloc  free 

11
免费如何知道要多少钱?
在C编程中,您可以将任意类型的指针作为参数传递给free,它如何知道要释放的内存的大小?每当我将指针传递给某个函数时,我都还必须传递大小(即,包含10个元素的数组需要接收10个参数作为参数来知道数组的大小),但是不必将大小传递给自由功能。为什么不这样做呢?我可以在自己的函数中使用相同的技术来使我免于需要购买数组长度的额外变量的麻烦吗?
384 c  size  pointers  free 

13
malloc()和free()如何工作?
我想知道如何malloc和free工作。 int main() { unsigned char *p = (unsigned char*)malloc(4*sizeof(unsigned char)); memset(p,0,4); strcpy((char*)p,"abcdabcd"); // **deliberately storing 8bytes** cout << p; free(p); // Obvious Crash, but I need how it works and why crash. cout << p; return 0; } 如果可能的话,我很感激如果答案在内存级别。

23
释放后将变量设置为NULL
在我公司中,有一条编码规则说,释放所有内存后,将变量重置为NULL。例如 ... void some_func () { int *nPtr; nPtr = malloc (100); free (nPtr); nPtr = NULL; return; } 我觉得,在如上所示代码的情况下,设置为NULL没有任何意义。还是我错过了什么? 如果在这种情况下没有意义,我将与“质量团队”一起解决,以删除此编码规则。请指教。

10
free(ptr)其中ptr为NULL会损坏内存吗?
理论上我可以说 free(ptr); free(ptr); 这是内存损坏,因为我们要释放已经释放的内存。 但是如果 free(ptr); ptr=NULL; free(ptr); 由于操作系统将以不确定的方式运行,因此我无法对此进行实际的理论分析。无论我在做什么,这是不是内存损坏? 释放NULL指针是否有效?

8
如何追踪“双重释放或腐败”错误
当我运行(C ++)程序时,它因该错误而崩溃。 *检测到glibc * ./load:两次释放或损坏(!prev):0x0000000000c6ed50 *** 如何追踪错误? 我尝试使用print(std::cout)语句,但未成功。可以gdb简化这个过程?
95 c++  c  debugging  free 

12
为什么C中的`free`不占用要释放的字节数?
明确一点:我确实知道malloc并free在C库中实现,该库通常从OS分配内存块,并进行自己的管理以将较小的内存分配给应用程序,并跟踪分配的字节数。这个问题不是免费如何知道多少免费。 相反,我想知道为什么free首先要采用这种方式。作为一种低级语言,我认为要求C程序员不仅跟踪分配了什么内存而且跟踪多少内存是完全合理的(实际上,我通常发现我最终跟踪了字节数)仍然分配)。在我看来,明确给出字节数free可能会允许某些性能优化,例如,具有针对不同分配大小的单独池的分配器将能够通过查看输入参数来确定要释放哪个池,并且总体而言,空间开销会更少。 因此,简而言之,为什么要创建malloc和free创建它们以使它们在内部跟踪分配的字节数?这只是历史性的意外吗? 一个小的修改:一些人提供了一些要点,例如“如果您释放的金额与分配的金额不同,将会怎样?” 我想象中的API可能只需要一个就可以准确释放分配的字节数。释放或多或少可以简单地由UB或实现定义。不过,我不想阻止关于其他可能性的讨论。

3
为什么将自由的返回值转换为无效?
我正在读一本使用C 的书(Butenhof的《使用POSIX线程编程》,1997年),并且遇到了以下问题: (void)free(data); 这data只是指向已分配结构的指针, data = malloc(sizeof(my_struct_t)); 为什么free被强制转换为void? 从我对C的理解来看,这似乎没有任何意义,原因有两个: 自由功能已经返回 void 该代码未使用返回值(甚至未分配给变量) 这本书写于1997年。这是某种遗留的东西吗? 作者提到这些示例是在Digital Unix 4.0d上运行的,但是如果您不打算使用该结果,我仍然无法想象有理由使用函数的结果。
82 c  casting  free  void  legacy-code 

12
无法释放C中的const指针
我怎样才能释放const char*?我使用分配了新的内存malloc,当我尝试释放它时,我总是收到错误“不兼容的指针类型” 导致这种情况的代码类似于: char* name="Arnold"; const char* str=(const char*)malloc(strlen(name)+1); free(str); // error here
73 c  constants  free 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.