Я новичок в 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