根据我的理解,
free()用于释放之前使用malloc分配的内存。
在我下面的片段中,我释放了我分配的内存。但是即使释放后我也能够访问指针?这怎么可能?
free如何在内部工作?
#include<iostream>
using namespace std;
int main()
{
int *p=(int *)malloc(sizeof(int));
*p=17;
free(p);
*p=*p+1;
printf("\n After freeing memory :: %d ",*p );
return 0;
}
在空闲(p)之后,是一个悬空指针,指向no wherefree()
只释放malloc()分配的内存块,它不会更改进程地址空间中指向堆的指针的值。在某些平台上,如果在释放指针后尝试取消引用,可能会出现segfault。如果在释放后将指针p指定给NULL,这是一种很好的做法。
访问悬空指针将导致未定义的行为。悬空指针是已经释放的指针。
在调用免费(p)后,您当然可以继续使用p,没有任何东西会阻止您。然而,结果将是完全不确定和不可预测的。它只能靠运气工作。这是一种常见的编程错误,称为“免费后使用”,在许多程序中可以工作多年而不出现“问题”,直到出现问题为止。
有些工具非常擅长发现此类错误,例如Valgrind。
问题内容: 我将一些matlpotlib函数集成到了一些django-celery任务中。 每次调用任务时,都会将更多RAM专用于python。不久之后,python占用了所有RAM。 问题: 如何释放此内存? 更新2-第二种解决方案: 我问过类似的问题,特别是有关内存锁定matplotlib错误的时候,但是我有一个很好的回答这个问题,以及如果使用多进程运行在单独的进程中绘图功能,其内存会自动释放
我正在创建一个应用程序,当我单击一个按钮时,它将在new中打开一个表。但我的问题是,当我关闭该表的时,应用程序不会释放内存。JavaFX有什么问题吗?还是我得做点别的? 我尝试在该阶段结束时将所有内容设置为空,但仍然没有释放内存。 表的舞台上的关闭事件: 表视图; 舞台我的舞台; 我已经创建了一个名为replaceScene方法来使用文件为Stage加载场景。它将返回它的控制器和设置的场景进入舞台
问题内容: 有没有一种类似于函数的释放Java内存的方法?还是将对象设置为null并依靠GC是唯一的选择? 问题答案: Java使用托管内存,因此分配内存的唯一方法是使用运算符,而释放内存的唯一方法是依靠垃圾回收器。 该内存管理白皮书(PDF)可能有助于解释发生了什么。 你还可以致电建议垃圾收集器立即运行。但是,Java Runtime做出最终决定,而不是你的代码。 根据Java文档, 调用gc方
问题内容: 我想从带有ctypes的C / C ++库中获取一些字符串到python中。我的代码如下所示: lib中的代码: Python代码: 如果我print()c_str,一切都在那里。问题是(或似乎是)在最后一行Python中。我无法释放内存- 库得到了错误的指针。我在这里做错了什么?(并且请不要建议boost :: python左右)。 问题答案: 正如David Schwartz指出的
问题内容: 我编写了一个Python程序,该程序作用于大型输入文件,以创建代表三角形的数百万个对象。该算法是: 读取输入文件 处理文件并创建一个三角形列表,以其顶点表示 以OFF格式输出顶点:顶点列表,后跟三角形列表。三角形由顶点列表中的索引表示 在打印出三角形之前必须先打印出完整的顶点列表的OFF要求意味着在将输出写入文件之前,必须将三角形的列表保留在内存中。同时,由于列表的大小,我遇到了内存错
问题内容: 我应该在将分配的字符串传递给之后释放它吗? 我有一些类似的代码: 在将字符串传递给之后释放字符串时,出现错误。如果我删除呼叫,该错误消失。我究竟做错了什么? 我看到矛盾的意见。有人说我应该自己释放它,有人说VM释放它,有人说VM不释放它,而您应该用奇怪的巫术魔术来释放它。我很困惑。 问题答案: 参数to 的存储完全由您负责:如果您分配了,则需要它。因此,您发布的代码段是正确的。您正在其