ダブルフリー
デザインさえずり----構造ポインタをクリアするとき:
...
if (obj && obj->tweet) free(tweet);
if (obj && obj->user) free(user);
if(obj) free(obj);
...
その中で、tweetとobjは構造体ポインターであり、tweetはリンクリストの先頭ですが、userは構造体ポインターの配列です。
#define MAX_SIZE 1024
struct User {
int userid;
int followee[MAX_SIZE];
};
struct tweet {
int userid;
int tweetid;
struct tweet *next;
};
// 改用User数组保存用户及其关注的人
typedef struct {
struct User *user[MAX_SIZE];
struct tweet *tweet;
} Twitter;
静的配列はプログラムの最後で自動的にクリアされるため、free(obj->user)
実際に実行する必要があると推測され、free(obj)
二重解放の状況になります。
ので*user[1024]
静的配列、それを使用すべきではありませんfree
が、エラーの様々な。
最初に行われた場合free(obj->tweet)
、その後free(obj->user)
があるでしょうヒープ使用-後-として無料。
構造が定義されている場合は、struct Tweet *tweet;
場所struct User *user[MAX_SIZE];
の前では、発生したmalloc関数はなかった住所に無料試みます )(