Problem mit einfach verketteter Liste



  • Hallo!

    Als aufgabe sollten wir ein Erzeuger-Verbraucher system mit semaphoren programmieren und als Datenstruktur eine Liste verwenden. Aber irgendwie klappt die implementierung meiner Liste nicht so richtig, ich weiß absolut nicht wie ich die Fehler beheben kann, hoffe jemand von euch kann mir helfen.

    Ich hab den COde der mit den Semaphoren zu tun hatte einfach mal rausgenommen, damit das nicht unnötig irritiert.

    Also es kommt mir hier nur auf die "blöde" Liste an, die ncih laufen will. Das mit den Semaphoren is egal und steht nicht zur diskussion 🙂 *gg*

    Fehler bekomm ich schon in Zeile 15 und 16 😞

    #include <pthread.h>
    #include <stdio.h>
    #include "semaphore.h"
    
    // Semaphore initialisiert 
    
    struct puffer{
    int inhalt;
    struct puffer *next;
    
    }
    
    void ringpuffer_init ()
    {
      struct puffer *next   = NULL;  
      struct puffer *anfang = NULL;
      // Semaphore initialisiert
    }
    
    void ringpuffer_push (int x)
    {
    struct puffer *zeiger;
    
    if(head== NULL) {
    
        if((head= (struct puffer *)
           malloc(sizeof(struct puffer))) == NULL) {
             printf("Kein Speicherplatz vorhanden für anfang\n");
             return;
           }
    
        head->inhalt = x;
        head->next=NULL;
    
    else {
          zeiger=anfang;
          while(zeiger->next != NULL)
             zeiger=zeiger->next;
    
          if((zeiger->next =(struct puffer *)
           malloc(sizeof(struct puffer))) == NULL) {
              fprintf(stderr,"Kein Speicherplatz für das "
                             "letzte Element\n");
              return;
          }
    
       zeiger=zeiger->next;
       zeiger->inhalt=x;
       zeiger->next=NULL;
    
    }
    
    int ringpuffer_pop ()
    {
      struct puffer *zeiger;
      zeiger=head;
    
      head=head->next;
    
      int x= zeiger->inhalt;
      free(*(zeiger));
      return x;
    }
    
    //--------------------------------
    
    void *writer (void *p)
    {
      int i = 17;
      while (1)
        {
    
     // Semaphor writer implementierung 
    
        }
    }
    
    void *reader (void *p)
    {
      int i;
    
      while (1)
        {
    
    // Semaphore reader implementierung
    
        }
    }
    
    //--------------------------------
    
    int main ()
    {
      pthread_t bla;
    
      ringpuffer_init ();
    
      pthread_create  (&bla, NULL, &writer, NULL);
      //pthread_create  (&bla, NULL, &reader, NULL);
    
      sleep(10000);
    }
    


  • ringpuffer_init() ist wirkungslos.



  • ...und mach die { nicht an's ende der zeilen.
    nicht so:

    if (...) {
      ...
      }
    else {
      ...
      }
    

    sondern so:

    if (...) 
    {
      ...
    }
    else 
    {
      ...
    }
    

    das macht deinen code lesbarer und du siehts sofort selbst ein paar fehler...



  • net schrieb:

    ...und mach die { nicht an's ende der zeilen.
    nicht so:

    if (...) {
      ...
      }
    else {
      ...
      }
    

    sondern so:

    if (...) 
    {
      ...
    }
    else 
    {
      ...
    }
    

    das macht deinen code lesbarer und du siehts sofort selbst ein paar fehler...

    Ne, aber man sollte es schon überall gleich machen.


Anmelden zum Antworten