user-0 提问: [链式结构的栈]

回复:
user: user-1
content: InitStack的参数是按值传递的，只是main函数中mystack的一个复制品，所以你在InitStack中把申请到的内存赋予指针并不是对main中的mystack进行赋值

user: user-2
content: 有几个问题： 1.main函数里你的mystack也要malloc 2.InitStack中楼主应该是要让mystack指向新创建的temp结点吧？ 3.getTop的时候应该传参(mystack->next)才是打印的第一个结点的值 4.const int OVERFLOW=1;最好换个名字，OVERFLOW是定义在math.h中的一个宏定义（有些编译器过不了编译）  #include "stdafx.h" #include "stdio.h" #include "stdlib.h" //#define var "%d\n" const int MY_OVERFLOW=1; typedef int DataType;  typedef struct Stack { 	DataType data; 	Stack* next; }Stack;  void RemoveStack(Stack* temp); void getTop(Stack* temp); void InitStack(Stack* temp,DataType data) { 	Stack* mid=temp; 	temp=(Stack *)malloc(sizeof(Stack)); 	//temp->next=mid; 	mid->next = temp; 	temp->data=data; }  void RemoveStack(Stack* temp) { 	if(temp=NULL) 	{ 		printf("Empty Stack Error"); 		exit(OVERFLOW); 	} 	Stack* mid=temp; 	temp=temp->next; 	//free(mid); }  void getTop(Stack* temp) { 	printf("%d",temp->data); }   void main(int argc, char* argv[]) { 	Stack* mystack = (Stack *)malloc(sizeof(Stack)); 	InitStack(mystack,2); 	getTop(mystack->next); }

user: user-2
content: 引用 4 楼 qq_34251172 的回复:typedef struct Stack { 	DataType data; 	Stack* next; }Stack;  void RemoveStack(Stack* temp); void getTop(Stack* temp); void InitStack(Stack* &temp,DataType data) { 	Stack* mid=temp; 	temp=(Stack *)malloc(sizeof(Stack)); 	temp->next=mid; 	temp->data=data; }  void RemoveStack(Stack* temp) { 	if(temp=NULL) 	{ 		printf("Empty Stack Error"); 		exit(OVERFLOW); 	} 	Stack* mid=temp; 	temp=temp->next; 	//free(mid); }  void getTop(Stack* temp) { 	printf("%d",temp->data); }   void main(int argc, char* argv[]) { 	Stack* mystack=(Stack *)malloc(sizeof(Stack)); 	mystack->next=NULL;  	InitStack(mystack,2); 	getTop(mystack); }  我改成了这样 感觉你多malloc了一次

user: user-0
content: 引用 1 楼 qq423399099 的回复:有几个问题： 1.main函数里你的mystack也要malloc 2.InitStack中楼主应该是要让mystack指向新创建的temp结点吧？ 3.getTop的时候应该传参(mystack->next)才是打印的第一个结点的值 4.const int OVERFLOW=1;最好换个名字，OVERFLOW是定义在math.h中的一个宏定义（有些编译器过不了编译）  #include "stdafx.h" #include "stdio.h" #include "stdlib.h" //#define var "%d\n" const int MY_OVERFLOW=1; typedef int DataType;  typedef struct Stack { 	DataType data; 	Stack* next; }Stack;  void RemoveStack(Stack* temp); void getTop(Stack* temp); void InitStack(Stack* temp,DataType data) { 	Stack* mid=temp; 	temp=(Stack *)malloc(sizeof(Stack)); 	//temp->next=mid; 	mid->next = temp; 	temp->data=data; }  void RemoveStack(Stack* temp) { 	if(temp=NULL) 	{ 		printf("Empty Stack Error"); 		exit(OVERFLOW); 	} 	Stack* mid=temp; 	temp=temp->next; 	//free(mid); }  void getTop(Stack* temp) { 	printf("%d",temp->data); }   void main(int argc, char* argv[]) { 	Stack* mystack = (Stack *)malloc(sizeof(Stack)); 	InitStack(mystack,2); 	getTop(mystack->next); }    这样会不会算是多创建一个内存空间呢，就是至少要有一个malloc结构体是这样吗

user: user-0
content: typedef struct Stack { 	DataType data; 	Stack* next; }Stack;  void RemoveStack(Stack* temp); void getTop(Stack* temp); void InitStack(Stack* &temp,DataType data) { 	Stack* mid=temp; 	temp=(Stack *)malloc(sizeof(Stack)); 	temp->next=mid; 	temp->data=data; }  void RemoveStack(Stack* temp) { 	if(temp=NULL) 	{ 		printf("Empty Stack Error"); 		exit(OVERFLOW); 	} 	Stack* mid=temp; 	temp=temp->next; 	//free(mid); }  void getTop(Stack* temp) { 	printf("%d",temp->data); }   void main(int argc, char* argv[]) { 	Stack* mystack=(Stack *)malloc(sizeof(Stack)); 	mystack->next=NULL;  	InitStack(mystack,2); 	getTop(mystack); }  我改成了这样