在释放内存时崩溃

Dar*_*zen 1 c crash

我有一个用于修改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循环被注释掉,则没有观察到崩溃.请让我知道可能是什么问题.

Alo*_*ave 5

鉴于您显示的代码,无法对根本原因说任何事情,因为:

  • 您的代码未显示如何在错误指针上完成分配.
  • 它也没有显示使用所述指针的所有地方(可能很多地方).

第二个有点棘手,因为指针可能已经被传递到n个控制路径,在那里它可能free再次被破坏或被破坏,可以理解的是,作为问题的一部分,不可能在这里提供所有这些.

鉴于上述情况,最好的办法是在Unix/Linux系统上使用Valgrind等内存分析工具或在Windows上使用Rational Purify.一旦您使用这些应用程序运行应用程序,它们将准确地指出问题的根本原因.