#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX 20
#define CAPACITY 20
typedef double digitType;
struct stack
{
int top; //栈顶指针
void* stack[CAPACITY]; //操作数为digitType型,操作符为char型
};
typedef struct stack STACK;
STACK S; <--这里是1号位置
void menu();
void insert(STACK* S, void* input);
void* pop(STACK* S);
void printAll(STACK *S);
int isoperator(char charac);
void midTransPoli(STACK* S, char* trans);
void reversePolishNotation(STACK *S,char* haha);
#include "head.h"
int main(int argc, char* argv[])
{
int choice;
char trans[MAX];
int i = 0;
S.top = 0;
do{
menu();
printf("选项:");
scanf("%d", &choice);
getchar();
switch(choice)
{
case 1:
midTransPoli(&S, trans); <--这里是2号位置
break;
case 2:
printf("****\n");
reversePolishNotation(&S,trans); <--这里是3号位置
break;
case 0:
break;
}
}while(choice != 0);
return 0;
}
上述代码成功运行。
问题:
1号位置若使用 STACK* S; 且 2号、3号参数列表改为 xxxx(S, xxx);则编译时通过,运行时出现段错误(刚运行就出现)
[1] 4364 segmentation fault ./main
这是为何?
假如想使用指针栈应该怎么使用?
解决方案
20
若那样,S仅仅是一个指针,指向 struct stack类型的变量,但是指向什么地方,没有赋值确定。后来通过S往它所指的变量字段内存取数据,到底是哪里呢