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 は初期化されていないため、使用できません。

于 2013-02-21T16:22:47.767 に答える
0

次の行で、スタックに割り当てられた変数のアドレスをポインターに割り当てます。

PAT_DATA_P=&PAT_DATA;

それからあなたはそれを解放しようとします!

于 2013-02-21T16:21:35.983 に答える