POP(void * ptr) --ptr soll einen bel. typ aus POP abholen



  • hallo,

    habe mal wieder ein problem mit meinem stack ...
    PUSH funzt jetzt ganz klasse (danke 🙂 )
    es liegen nun also versch. datenobjekte auf dem stack (TElem-gek. liste)

    nur wie hole ich die wieder ab?

    POP _muss_ so aussehen:

    int POP (void* vPDatum , TStapel *PS)

    (ich weiss in meinem pop steht "int G" noch drin, soll auch, darf aber nicht benutzt werden - egal...)

    mein problem ist, dass ich nur diesen void-ptr hab für datenaustausch.
    ich kann ihn nicht in MAIN mallocen da ich sizeof(Datum) noch nicht weiss.
    ich kann nicht die adresse von PH->PDatum an vPDatum übergeben, da ich keinen ptrptr übergeben darf sondern nur vPDatum selbst.
    MALLOC von vPDAtum in POP funzt auch net (warum darf ich das eigentlich nicht? keines meiner tollen bücher macht mir irgendwie klar was ich in welchen gültigkeitsbereichenmit meine ptr anfangen darf)
    damit fällt irgendwie memcpy flach ... (oder ??)

    also ich hab so ziemlich alles ausprobiert, komm halt net drauf. bin aber auch erst seit 2 wochen dabei mit so ptr und listen und kram und steh best. dick aufm schlauch .... 😃

    /*....*/
    
    typedef struct TElement {
       int G;
       char *PDatum;
       struct TElement *Pnext;
    }TElem;
    
    typedef struct TStack {
     TElem *Anker;
    }TStapel;
    
    typedef struct adress{
     char Name[16]; /*Vorname[16],Strasse[16],Ort[16];*/
     char PLZ[6];
    }Adresse;
    
    /*....*/
    
    TStapel* InitStapel(void) {
     TStapel *PH;
     PH=(TStapel *)malloc(sizeof(TStapel));
     if (PH==NULL) return NULL;
     PH->Anker=NULL;
     return PH;
    }
    
    void main (void){
    
    /*.....*/
    
    int intDatum; 
    int *PintDatum;
    char charDatum[21];
    Adresse adrDatum;
    void *vPDatum;
    
    TStapel *PStapel=InitStapel();
    
    /*....*/
    
    /* vPDatum=malloc(G); ich kenne die grösse ja jetzt noch nicht */
    if (Pop(vPDatum, G, PStapel)) printf("\nStack leer!");
    
    /*...*/
    
       PintDatum=vPDatum;
       printf("\nPOP: integer Wert \"%d\"", *PintDatum);
    
    /*...*/
    
    int Pop(void *vPDatum, int G, TStapel *PS){
    
     TElem *PH;
     if (PS->Anker  == NULL) return 1;
     PH=PS->Anker;
    
     /*vPDatum=malloc(sizeof(PH->PDatum));
     memcpy(vPDatum,PH->PDatum,G);    .... weder so....*/
    
     /*vPDatum=PH->PDatum; ...noch so wills :( */
    
     PS->Anker=PH->Pnext;
     free(PH);
     return 0;
    

    [ Dieser Beitrag wurde am 29.04.2003 um 11:11 Uhr von Dill editiert. ]



  • ok hat sich erledigt ...
    hab den voidPtr in main gemalloced:

    vPDatum=malloc(PStapel->Anker->G);
    

Anmelden zum Antworten