【发布时间】:2012-01-13 05:13:35
【问题描述】:
我有一个用于修改 pdf 文件内容的应用程序。完成所需的更改后,我保存文件并退出应用程序。在此过程中,我想清除已分配给 pdf 文件的内存。代码如下:
for (i32 i = 0; i < job_state->PDF_IList_len; i++) {
if(IList[i].PIL_ImageData.PDH_DataPtr.PDH_PathName)
free (IList[i].PIL_ImageData.PDH_DataPtr.PDH_PathName);
if(IList[i].PIL_DependentImages)
free (IList[i].PIL_DependentImages);
}
job_state->PDF_ImageList = NULL;
job_state->PDF_context = NULL;
free (IList);
job_structure 是保存文件信息的数据结构。
PDH_Pathname 是存储 pdf 详细信息的临时目录。
我的应用程序总是崩溃
free (IList[i].PIL_ImageData.PDH_DataPtr.PDH_PathName);
我注意到,每当它崩溃时,无法评估免费(IList[i].PIL_ImageData.PDH_DataPtr.PDH_PathName) 的值(调试器就是这么说的)。
如果注释掉 for 循环,则不会观察到崩溃。请让我知道可能是什么问题。
【问题讨论】:
-
您可以发布您分配这些资源的位置和次数:/
-
你标记了这个 C++,但代码调用了
free:( -
对不起..这部分代码在C语言中
-
此资源仅在使用该文件启动应用程序时被分配一次。关键是文件大小小于 2048mMB 时它不会崩溃。
-
malloc和free是完全有效的 C++ 代码,尽管在可能的情况下首选new和delete肯定有很好的论据。