LeetCode-design tweet出现的错误

double-free

design twitter----对结构体指针进行清除时:

...
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)所以出现了double-free的情况。
因为*user[1024]为静态数组,所以不应该使用free,但出现的错误多种多样。
如果先进行free(obj->tweet)free(obj->user)会出现heap-use-after-free
但是如果把结构体定义中,struct Tweet *tweet;放到struct User *user[MAX_SIZE];前面,则会出现attempting free on adress which was not malloc()

猜你喜欢

转载自www.cnblogs.com/AIxiaodi/p/12702824.html