user-0 提问: 顺序栈操作集，错在哪里啊

回复:
user: user-0
content: 引用 6 楼 zhao4zhong1 的回复:崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。 一年前，你给我回复了，后来忙着考试没再学C，没想到啊现在又给我回复了。 好人一生平安。

user: user-0
content: 引用 5 楼 anquan88 的回复: #include <stdio.h> #define MaxSize 100  struct StackNode { 	int data[MaxSize]; 	int top; };  typedef struct StackNode *PtrStackNode; bool PushStack(PtrStackNode);  PtrStackNode create(int N) { 	//要函数声明，否则将PushStack看成int返回值类型，造成类型不匹配  	PtrStackNode stack = new StackNode; 	int i;  	stack->top = -1;  	for (i = 0; i<N; i++) 	{ 		if(!PushStack(stack)) 			break; 	}  	return stack; }  int IsEmpty(PtrStackNode stack) { 	if (stack->top == -1) 		return 1; 	else 		return 0; }  int IsFull(PtrStackNode stack) { 	if (stack->top == MaxSize - 1) 		return 1; 	else 		return 0; }  bool PushStack(PtrStackNode stack) { 	int item;  	if (!IsFull(stack)) 	{ 		scanf_s("%d", &item);  		stack->top++; 		stack->data[stack->top] = item; 		return 1; 	} 	else 	{ 		printf("栈已满\n"); 		return 0; 	} }   void PopStack(PtrStackNode stack) { 	if (IsEmpty(stack)) printf("栈已空，无法出栈\n");   //有返回值的函数无返回 	else 		printf("已删除%d\n", stack->data[stack->top--]);   //如果是stack->top减2，可以将其赋值给一个变量，减2后再返回      }   void OutPutStack(PtrStackNode stack) { 	int k; 	k = stack->top; 	while (k>-1) 	{ 		printf("%d\n", stack->data[k]); 		k--; 	} 	printf("已输出完毕\n"); 	return;  }   int main() {  	int N; 	PtrStackNode stack;  	printf("请输入栈中元素个数:"); 	scanf_s("%d", &N); 	printf("\n");  	stack = create(N); //建栈N个元素,返回栈结点指针  	OutPutStack(stack);  	PopStack(stack);  	OutPutStack(stack);  	PushStack(stack); 	delete stack; }  看着你的代码总算改好了，调用IsEmpty,IsFull函数竟然没写实参 建立栈时竟然忘记建立空间保存栈这种结构  #include <stdio.h> #include <stdlib.h> #define MaxSize 100  struct StackNode { 	int data[MaxSize]; 	int top; }; typedef struct StackNode *PtrStackNode; void PushStack( PtrStackNode stack );  PtrStackNode create( int N ) {     void PushStack( PtrStackNode stack );//要函数声明，否则将PushStack看成int返回值类型，造成类型不匹配      PtrStackNode stack = (PtrStackNode) malloc( sizeof (struct StackNode) ) ;//建立栈时需要开辟一个空间让指针指向它，在空间内有元素data数组	 	int i;  	 	stack->top=-1;  	for( i=0 ; i<N ; i++ ) 	{		 		PushStack( stack ); 	}  	return stack; }   int IsEmpty( PtrStackNode stack ) { 	if( stack->top==-1 ) 		return 1; 	else 		return 0; }   int IsFull( PtrStackNode stack ) { 	if( stack->top == MaxSize-1 ) 		return 1; 	else 		return 0; }   void PushStack( PtrStackNode stack ) { 	int item; 	 	if( !IsFull(stack) )	 	{	 		scanf("%d",&item); 	 		stack->top++; 		stack->data[stack->top] = item ; 		return; 	} 	else 	{ 		printf("栈已满\n"); 		return; 	} }   void PopStack( PtrStackNode stack ) { 	if(IsEmpty(stack)) printf("栈已空，无法出栈\n");   //有返回值的函数无返回 	else 		printf ( "已删除%d\n" , stack->data[stack->top--] ) ;   //如果是stack->top减2，可以将其赋值给一个变量，减2后再返回	  }   void PrintfPutStack(PtrStackNode stack) { 	int k; 	k=stack->top; 	while(k>-1) 	{ 		printf( "%d\n" , stack->data[k] ); 		k--; 	} 	printf("已输出完毕\n") ; 	return;  }   int main() { 	 	int N; 	PtrStackNode stack;  	printf("请输入栈中元素个数:"); 	scanf("%d",&N); 	printf("\n");      stack = create( N ) ; //建栈N个元素,返回栈结点指针  	PrintfPutStack(stack);  	PopStack(stack);  	PrintfPutStack(stack);  	PushStack(stack); 	 }

user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。

user: user-2
content: #include <stdio.h> #define MaxSize 100  struct StackNode { 	int data[MaxSize]; 	int top; };  typedef struct StackNode *PtrStackNode; bool PushStack(PtrStackNode);  PtrStackNode create(int N) { 	//要函数声明，否则将PushStack看成int返回值类型，造成类型不匹配  	PtrStackNode stack = new StackNode; 	int i;  	stack->top = -1;  	for (i = 0; i<N; i++) 	{ 		if(!PushStack(stack)) 			break; 	}  	return stack; }  int IsEmpty(PtrStackNode stack) { 	if (stack->top == -1) 		return 1; 	else 		return 0; }  int IsFull(PtrStackNode stack) { 	if (stack->top == MaxSize - 1) 		return 1; 	else 		return 0; }  bool PushStack(PtrStackNode stack) { 	int item;  	if (!IsFull(stack)) 	{ 		scanf_s("%d", &item);  		stack->top++; 		stack->data[stack->top] = item; 		return 1; 	} 	else 	{ 		printf("栈已满\n"); 		return 0; 	} }   void PopStack(PtrStackNode stack) { 	if (IsEmpty(stack)) printf("栈已空，无法出栈\n");   //有返回值的函数无返回 	else 		printf("已删除%d\n", stack->data[stack->top--]);   //如果是stack->top减2，可以将其赋值给一个变量，减2后再返回      }   void OutPutStack(PtrStackNode stack) { 	int k; 	k = stack->top; 	while (k>-1) 	{ 		printf("%d\n", stack->data[k]); 		k--; 	} 	printf("已输出完毕\n"); 	return;  }   int main() {  	int N; 	PtrStackNode stack;  	printf("请输入栈中元素个数:"); 	scanf_s("%d", &N); 	printf("\n");  	stack = create(N); //建栈N个元素,返回栈结点指针  	OutPutStack(stack);  	PopStack(stack);  	OutPutStack(stack);  	PushStack(stack); 	delete stack; }

user: user-0
content: 引用 1 楼 anquan88 的回复:PtrStackNode create( int N ) {     void PushStack( stack );//要函数声明，否则将PushStack看成int返回值类型，造成类型不匹配                                        //这儿的函数声明不对，stack又不是某种变量类型，改成PtrStackNode      PtrStackNode stack;     int i;           stack->top=-1;       for( i=0 ; i<N ; i++ )     {                PushStack( stack );     }       return stack; } 改了下还是不行 会不会和函数的调用有关

user: user-0
content: 引用 2 楼 zhangxiangDavaid 的回复:学会设置断点调试~ 我把那句错误的声明改了下， void PushStack( PtrStackNode stack );还是运行不了。 试着调试看了，不知道错在哪

user: user-3
content: 学会设置断点调试~

user: user-2
content: PtrStackNode create( int N ) {     void PushStack( stack );//要函数声明，否则将PushStack看成int返回值类型，造成类型不匹配                                        //这儿的函数声明不对，stack又不是某种变量类型，改成PtrStackNode      PtrStackNode stack;     int i;           stack->top=-1;       for( i=0 ; i<N ; i++ )     {                PushStack( stack );     }       return stack; }