leetcode- c ошибка ответа heap-use-after-free - PullRequest
0 голосов
/ 18 марта 2019

Я новичок в CI, отвечаю на вопрос 20 leetcode. Я реализую стек для решения проблемы. Я хочу знать, где я ошибаюсь. Я получаю некоторую информацию об ошибке. Говорят, что есть утечка памяти. Я проверил и не могу понять. Код выглядит следующим образом:

    struct linestack{
    char element;
    struct linestack *next;
};

struct linestack *push(struct linestack *head,char c);
char pop(struct linestack *head);

bool isValid(char* s) {
    char *p = s;
    char c;
    struct linestack* head;
    while(*p!='\0'){
        if(*p=='('||*p=='{'||*p=='['){
            head = push(head,*p);
        }else{
            if(head)
                 c = pop(head);
            else
                return false;
            if(*p=='('&&c!=')')
                return false;
            if(*p=='['&&c!=']')
                return false;
            if(*p=='{'&&c!='}')
                return false;
        }
        p++;
    }
    return true;
}


struct linestack* push(struct linestack *head,char c){
    struct linestack* line = (struct linestack*)malloc(sizeof(struct linestack));
    line->element = c;
    line->next = head;
    head = line;
    return head;
}

char pop(struct linestack *head){
    char res;
    if(head){
        struct linestack* p = head;
        res = head->element;
        head = head->next;
        free(p);
    }
    return res;
}

Ошибка выглядит следующим образом:

AddressSanitizer: heap-use-after-free on address 0x6020000001b0 at pc 0x00000040171c bp 0x7ffff6ca1190 sp 0x7ffff6ca1188
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...