我有一个用于修改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);
Run Code Online (Sandbox Code Playgroud)
job_structure是保存文件信息的数据结构.
PDH_Pathname
是存储pdf详细信息的临时目录.
我的应用程序总是崩溃
free (IList[i].PIL_ImageData.PDH_DataPtr.PDH_PathName);
Run Code Online (Sandbox Code Playgroud)
我注意到,无论何时崩溃,(IList[i].PIL_ImageData.PDH_DataPtr.PDH_PathName)
都无法评估free的值(这就是调试器所说的).
如果for循环被注释掉,则没有观察到崩溃.请让我知道可能是什么问题.
鉴于您显示的代码,无法对根本原因说任何事情,因为:
第二个有点棘手,因为指针可能已经被传递到n个控制路径,在那里它可能free
再次被破坏或被破坏,可以理解的是,作为问题的一部分,不可能在这里提供所有这些.
鉴于上述情况,最好的办法是在Unix/Linux系统上使用Valgrind等内存分析工具或在Windows上使用Rational Purify.一旦您使用这些应用程序运行应用程序,它们将准确地指出问题的根本原因.