目标是创建一个平衡符号检查器,程序查找这些符号的输入<{[(),然后检查它们是否关闭。每次遇到其中一个时,都会将其推送到堆栈上。一旦堆栈满了,就需要分配更多的内存。
我不确定这个错误是从哪里来的,但我相信可能是我的push函数造成的。我非常困惑,到处都在搜索(在这里查看每个标题相似的问题,并尝试建议的解决方案),试图解决它。据我所知,这个错误意味着我试图两次释放某些东西,但我不知道会在哪里发生。我尝试了多种不同的方法来做这件事,但似乎没有任何效果。请帮忙。
对如何调整动态数组的大小也有点困惑。说到这里,我以为你做了一个新的temp*指向数组内容,用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;
}