0

我有这个代码

 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 ***

错误在哪里?

4

3 回答 3

2

你的错误就行了PAT_DATA_P = &PAT_DATA

PAT_DATA在栈上分配。

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

于 2013-02-21T16:16:59.457 回答
0

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

PAT_DATA_P=&PAT_DATA;

然后你尝试释放它!

于 2013-02-21T16:21:35.983 回答
0

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

于 2013-02-21T16:22:47.767 回答