释放指向struct的指针

时间:2013-02-21 16:14:36

标签: c malloc free

我有这段代码

 struct PDATA{
    int NTH;
    int NPH;
    double th_start;
    double th_step;
    double ph_start;
    double ph_step;
    };

    typedef struct PDATA *PDATA_P;

    struct PDATA PAT_DATA;
    PDATA_P PAT_DATA_P;

    PAT_DATA_P = (PDATA_P) malloc(sizeof(struct PDATA));
    PAT_DATA_P=&PAT_DATA;

    ....

    free(PAT_DATA_P); 

当我释放指针时,我得到了这个错误:

*** glibc detected *** /home/pc-linux/Desktop/Projects/AM_v0.1/Debug/AM_v0.1: free(): invalid pointer: 0xbfffe03c ***

错误在哪里?

3 个答案:

答案 0 :(得分:2)

您的错误在PAT_DATA_P = &PAT_DATA

PAT_DATA在堆栈上分配。

也许你的意思是*PAT_DATA_P = PAT_DATA复制成员,而不是分配指针?

答案 1 :(得分:0)

使用以下行将堆栈中分配的变量的地址分配给指针:

PAT_DATA_P=&PAT_DATA;

然后你试着释放它!

答案 2 :(得分:0)

始终初始化要创建的变量。这是一个很好的做法 PAT_DATA在任何时候都没有初始化,因此无法使用。