Цель состоит в том, чтобы создать сбалансированную проверку символов, программа ищет ввод этих символов <{[(, а затем проверяет, закрыты ли они. Каждый раз, когда встречается один из них, он должен быть помещен в стек.Как только стек заполнен, необходимо выделить больше памяти. Я не уверен, откуда эта ошибка, но я полагаю, что это может быть из-за моей функции push. Я очень запутался и искал везде (просмотрел каждый вопрос спохожий заголовок здесь и попытался предложить решения), чтобы попытаться исправить это. Из того, что я мог собрать, эта ошибка означает, что я пытаюсь освободить что-то дважды, но я не могу понять, где это будет происходить. Я пробовал несколько разных способовделать это, и, кажется, ничего не работает. Пожалуйста, помогите. </p>
Также немного запутался в том, как изменить размер динамического массива. Переходя к этому, я думал, что вы сделали новый темп *, указывающий на содержимое массива, изменил размер оригинала сmalloc, который удаляет все содержимое, а затем помещает содержимое, сохраненное в temp, обратно.Мы видели, что это сделано несколькими различными способами, и я не уверен, какой способ использовать в каком контексте.Спасибо.
typedef struct{ //for reference
char *darr;
int size;
int top;
}
stack;
void push (stack *s, char tsymbol){
if (s->top == s->size){ //if stack is full
char *temp = (char*)malloc(sizeof(char)*s->size);
temp = s->darr;
free(s->darr);
s->darr = temp;
s->size += 2;
}
s->darr[++(s->top)] = tsymbol;
//s->top = s->top + 1;
}
другой подход
if (s->top == s->size-1){ //if stack is full
char *pTemp;
pTemp = (char*)malloc(sizeof(char)*((s->size)+2));
int i;
for (i=0; i<(s->top); i++){
pTemp[i] = s->darr[i];
}
free (s->darr);
s->darr = pTemp;
}
s->darr[s->top] = tsymbol;
s->top = s->top + 1;
}