#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往它所指的变量字段内存取数据,到底是哪里呢