2014-04-01 30 views
0

我尝试制作一个包含指向其他类型结构(Prof或Stud)的指针(意思是地址)的堆栈。但我似乎无法管理它。错误是无限的。这里是代码:包含指向其他结构的堆栈

 struct MyStack 
    { 
     int head; 
     void **stack; 
     int size; 
    }; 

    struct stud 
    { 
     char flag; 
     char fname[50]; 
     int semester; 
    }; 
    struct prof 
    { 
     char flag; 
     char fname[50]; 
     char course[30]; 
    }; 
int InitStack(int size,struct MyStack *stack); 

int InitStack(int size,struct MyStack *stack) 
{ 
    stack->size = size; 
    *stack->stack=(int *) malloc(size*sizeof(int)); //Is this RIGHT? 
    stack->head=-1; 
    return 0; 
} 
int main() 
{ 
    int size,sel; 

    size = GiveSize(); 
    struct MyStack NewStack; 
    InitStack(size,&NewStack); 

    do{ 
    sel=Menu(); 
    Select(sel,NewStack.head,&NewStack); 
    }while (sel!=0); 



    return 0; 
} 

我如何能将指针(指向钉和指导)到堆栈?

继承人的代码:

int CreateStud(struct MyStack *stack,char *name,int sem,int *head,int n) 
{ 
struct stud newStud; 
int thead=*head; 

newStud.flag='s'; 
strcpy(newStud.fname,name); 
newStud.semester=sem; 
Push(stack,&thead,&newStud,n); 
*head=thead; 

return 0; 
} 
int Push(struct MyStack *stack,int *head, void *elem,int n) 
{ 
if(*head>=n-1) 
    return 0; 
stack->stack[++*head]=elem; 

return 1; 
} 
+1

不要担心“错误是无限的”,通常一个小错误可能会导致编译器生成一个在第一个错误之后复合的错误负载。 – CatsLoveJazz

+1

请显示错误。 – OldProgrammer

+0

我修正了errors.actually程序崩溃现在 – CosmaOne

回答

0

InitStack功能应该是

int InitStack(int size,struct MyStack *stack) 
{ 
    stack->size = size; 
    stack->stack= malloc(size * sizeof(void*)); 
    stack->head=-1; 
    return 0; 
} 

推送功能应该是这样的

int Push(struct MyStack *stack, void *str) 
{ 
    /* Check if stack is full */ 
    stack->head++; 
    stack->stack[stack->head] = str; 
    return 0; 
} 

的,你可以使用它作为

struct stud s1; 
struct prof p1; 

Push(&NewStack, &s1); 
Push(&NewStack, &p1); 
+0

我试过你的方式,但当我尝试推它的东西崩溃..我编辑答案...我可以发布更多的代码,如果你想 – CosmaOne

+0

,因为你正在创建函数中的结构函数返回时删除。你需要创建一个全局变量 – obareey

+0

它不能没有全局变量? – CosmaOne

相关问题