问题标签 [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.

0 投票
10 回答
5603 浏览

c++ - 调用 free() 或 delete 而不是 delete[] 有什么危险吗?

可能重复:
(POD)释放内存:delete[] 等于 delete 吗?

是否delete释放数组中第一个元素之外的元素?

在上述情况下,看到 的所有元素s都是连续分配的,不应该delete只分配数组的一部分吗?

对于更复杂的类型,是否会delete调用第一个之外的对象的析构函数?

怎么能delete[]推导出Object第一个之外的 s 的数量,这不是说它必须知道分配的内存区域的大小吗?如果出于性能原因分配的内存区域有一些悬垂怎么办?例如,可以假设并非所有分配器都提供单个字节的粒度。那么任何特定的分配都可能超过每个元素所需的大小一个或更多的整个元素。

对于原始类型,例如char, int,两者之间有什么区别:

delete除了通过->free释放机制的各个调用所采用的路由吗?

0 投票
4 回答
1527 浏览

c++ - 在使用 delete 释放的对象的析构函数中使用 free

我有一个用 delete 释放的对象,char*它的析构函数中有一个用 free 释放的对象。我使用 free 的原因是因为我使用了 strdup 并malloc创建了char指针。我使用的原因malloc是因为我在大多数代码路径中都使用了 strdup。这种情况会导致内存损坏吗?

0 投票
5 回答
2860 浏览

c - c malloc 问题(内存损坏)

使用 malloc 时,如果它产生带有错误的核心转储:

这是否意味着 malloc 试图分配不能自由分配的内存?如果那是什么原因造成的?

0 投票
4 回答
519 浏览

linux - 有没有办法确定 free() 是否会失败?

有没有办法确定如果free()在某个内存块指针上调用是否会失败?

我有以下情况:有权访问共享资源的线程失败,而可能处于释放所述资源的状态。现在我需要设计一种安全的方法来清理这个共享资源。

当然,我已经为正常情况分配了资源的所有权,但是上述限制情况呢?

更新:如果我使用额外的同步机制,它只会做更多的清理工作,并且可能涉及额外的限制条件。如果可能,我想限制/避免这些。

解决方案:我最终决定执行重构。感谢所有贡献者。你们真棒!

0 投票
5 回答
47544 浏览

c - C:正确释放多维数组的内存

假设您有以下初始化多维数组的 ANSI C 代码:

使用后**a,如何正确从内存中释放它?


[更新](解决方案)

感谢蒂姆(和其他人)的回答,我现在可以执行这样的功能来从我的多维数组中释放内存:

0 投票
3 回答
1761 浏览

c++ - 在 malloc() 和 free() 之后似乎分配了一些内存

我是 C 新手。我正在努力适应 malloc + free。我已经编写了以下测试代码,但由于某种原因内存没有完全释放(顶部仍然表示分配给进程的内存约为 150MB)。这是为什么?

对应的Makefile:

0 投票
2 回答
38165 浏览

c++ - What can cause "corrupted double-linked list" error?

I am having problems with a fairly complex code. I wasn't able to produce a short snippet that reproduces the error, so I'll try to explain the problem in words.

The code crashes randomly with the error

Debugging showed that it comes from the line where the codes frees an object. There seems to be nothing wrong with the object. It exists, and I can access it's data at the time the error occurs. The object's destructor is trivial and doesn't do anything.

So, I'm kind of stuck. In what kind of circumstances do you expect 'free' to fail?

0 投票
10 回答
35230 浏览

c - 释放指针后真的应该将指针设置为“NULL”吗?

NULL似乎有两个论点为什么在释放它们之后应该设置一个指针。

避免双重释放指针时崩溃。

简短:free()第二次调用,意外地,当它设置为时不会崩溃NULL

  • 这几乎总是掩盖了一个逻辑错误,因为没有理由再次调用free()。让应用程序崩溃并能够修复它会更安全。

  • 不能保证会崩溃,因为有时会在同一地址分配新内存。

  • 双重释放主要发生在有两个指针指向同一个地址时。

逻辑错误也可能导致数据损坏。

避免重用释放的指针

简短:如果在同一位置分配内存,访问已释放的指针可能会导致数据损坏malloc(),除非已释放的指针设置为NULL

  • NULL如果偏移量足够大(someStruct->lastMember, theArray[someBigNumber]) ,则无法保证程序在访问指针时崩溃。不是崩溃,而是数据损坏。

  • 将指针设置为NULL不能解决指针值相同的不同指针的问题。

问题

这是一篇反对NULL在释放后盲目设置指针的帖子。

  • 哪个更难调试?
  • 是否有可能同时抓住两者?
  • 此类错误导致数据损坏而不是崩溃的可能性有多大?

随意扩展这个问题。

0 投票
10 回答
93297 浏览

c - ptr 为 NULL 的 free(ptr) 是否会损坏内存?

理论上我可以这么说

是内存损坏,因为我们正在释放已经释放的内存。

但是如果

由于操作系统将以未定义的方式运行,因此我无法对正在发生的事情进行实际的理论分析。无论我在做什么,这是否是内存损坏?

释放 NULL 指针是否有效?

0 投票
8 回答
79112 浏览

c - free 和 malloc 在 C 中是如何工作的?

我试图弄清楚如果我尝试“从中间”释放一个指针会发生什么,例如,看看下面的代码:

我因未处理的异常错误消息而崩溃。我想了解免费工作的原因和方式,以便我不仅知道如何使用它,而且能够理解奇怪的错误和异常并更好地调试我的代码ץ

非常感谢