#include <stdio.h>
#include <stdlib.h>
static int top = 0;
static char stack[100];
void push(char thing2push)
{
if (top == 100){
fprintf(stderr, "Too many things in the stack");
exit(1);
}else{
stack[top] = thing2push;
top++;
}
}
然后在主要我有:
extern void push(int);
push(1);
但这会导致&#34;分段错误&#34;。我猜它与内存违规有关,但我不知道如何修复它。
编辑以下是完整的代码:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
extern int pop();
extern void push(int);
void readTag(){
int tagVal = getchar();
int poppedVal;
if (getchar() == '/'){
poppedVal = pop();
if (poppedVal != tagVal){
printf("NOT Valid");
exit(1);
}
}else{
push(1);
}
}
int main(int argc, char * argv[])
{
int ch;
while ((ch = getchar()) != EOF) {
if (!(isalpha(ch) || ch == '<'))
continue;
readTag();
}
printf("Valid");
exit(0);
}
以及堆栈:
#include <stdio.h>
#include <stdlib.h>
static int top = 0;
static char stack[100];
int isEmpty()
{
return !(top);
}
char pop()
{
if (isEmpty()){
fprintf(stderr, "Stack is empty");
exit(1);
}
top--;
return stack[top+1];
}
void push(char thing2push)
{
if (top == 100){
fprintf(stderr, "Too many things in the stack");
exit(1);
}else{
stack[top] = thing2push;
top++;
}
}
答案 0 :(得分:1)
top
变量始终指示堆栈中的 next 条目(就程序问题而言,显然不包含有效元素)。所以你不应该在stack[top]
读取价值。
当pop
达到100时,功能top
会发生分段错误:
top--; // top == 99
return stack[top+1]; // return stack[100]
您应该写入stack[top]
,但请阅读stack[top-1]
。
您可以按原样保留功能push
,只更改功能pop
:
top--;
return stack[top];