Malloc Verständnisproblem Teil 2 !

Tutorials.at
Verfügbare Informationen zu "Malloc Verständnisproblem Teil 2 !"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: Zuul
  • Forum: Tutorials.at
  • Forenbeschreibung: Programmierforum
  • aus dem Unterforum: C / C++
  • Antworten: 2
  • Forum gestartet am: Mittwoch 19.04.2006
  • Sprache: deutsch
  • Link zum Originaltopic: Malloc Verständnisproblem Teil 2 !
  • Letzte Antwort: vor 17 Jahren, 4 Monaten, 20 Tagen, 13 Stunden, 40 Minuten
  • Alle Beiträge und Antworten zu "Malloc Verständnisproblem Teil 2 !"

    Re: Malloc Verständnisproblem Teil 2 !

    Zuul - 10.01.2007, 13:16

    Malloc Verständnisproblem Teil 2 !
    Hey ;)

    Nachdem ihr mir hier so grandios weiter geholfn habt und ich immer noch dezente schwierigkeiten habe bitte ich euch nun erneut um eure hilfe ... ausserdem bitte ich um entschuldigung, da der folgende code relativ lang ist ;)

    Code: #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define Zeilenlange 100

    int vergleich(const void **Var1,const void **Var2);
    int allocn(char Dateiname[]);

    int vergleich(const void **Var1,const void **Var2)
    {
       return strcmp(*(char**)Var1,*(char**)Var2);
    }

    int allocn(char Dateiname[])
    {
       int wortanz=0,wortlang,i=0,j=0;
       char Zwischenspeicher[Zeilenlange];
       FILE *datei;
       char* zwischen=NULL;
       char* pcPointer=NULL;
       
       datei=fopen(Dateiname, "r");                           /*Datei Öffnen*/
       if(datei==NULL)
       {
          fprintf(stderr, "Konnte die Datei, %s, nicht finden.\n",Dateiname);   
          return EXIT_FAILURE;            
       }

       while(fgets(Zwischenspeicher,Zeilenlange,datei))            /*Wörter in Zwischenspeicher schreiben*/
       {
          wortanz++;
          printf("%s",Zwischenspeicher);
       }
       rewind(datei);                                       /* Datei wieder an den Anfang setzen*/
       
       pcPointer=(char*)malloc(wortanz*sizeof(char*));               /* Erstellen einer Wortliste */
       if(pcPointer==NULL)
       {
          printf("Konnte nicht allokieren.\n");
       }
       j=0;                                             /* Zähler für die Wortliste */
       while(fgets(Zwischenspeicher,Zeilenlange,datei))            /* Wörter in einen Zwischenspeicher kopiern */
       {
          for(i=0;i<sizeof(Zwischenspeicher);i++)
          {
             if(Zwischenspeicher[i]=='\n')
             {
                Zwischenspeicher[i]='\0';
                break;
             }
          }            
       
          wortlang=strlen(Zwischenspeicher);   
          zwischen=(char*)malloc(wortlang*sizeof(char));
          
          if(zwischen==NULL)
          {
             printf("Konnte Wort nicht anlegen.\n");
             return EXIT_FAILURE;
          }
       
          *(pcPointer+j)=(char)zwischen;
          j++;
          for(i=0;i<wortlang;i++)
          {
             *(zwischen+i)=Zwischenspeicher[i];
          }      
       }
    //----------Funktioniert nicht, wirft Speicherfehler------------
    //   qsort(pcPointer,wortanz,sizeof(char*),vergleich);                     /* Sortieren*/   
    //   for(j=0;j<wortanz;j++)
    //   {
    //      printf("Nr:%d, %s\n",j,pcPointer[j]);                           /*Ausgabe*/
    //   }
    //--------------------------------------------------------------
       fclose(datei);
       free(pcPointer);
       free(zwischen);
       printf("------------------------------------------------------------------------------\n");
       return EXIT_SUCCESS;
    }



    int main(int argc,char *argv[])
    {
          
       int laufvariable=1;

       printf("Ihre angegebenen Dateinamen: ");
       for(laufvariable;laufvariable<argc;laufvariable++)
       {
          if(argv[laufvariable] != NULL)
          {
             printf("%s, ",argv[laufvariable]);
             allocn(argv[laufvariable]);
          }
          if(argv[laufvariable]==NULL)
          {         
             break;
          }
       }
          
       
       if(argv[1]==NULL)                                          /*Fehler Abfangen*/
       {
          printf("Kein Parameter angegeben! Programm bitte aus der CMD starten!");                           
       }
       getchar();
       return 0;


    }


    Ich habe mich wirklich bemüht den fehler zu finden und auch meine kollegen um hilfe gebeten, doch die wusstn leider auch nicht woran genau es scheitert ...

    Im Kommentar steht, wo der fehler entsteht, habs mal ausgeklammert, damits zum compiliern geht ...


    auszuführen is es wie man sieht über die CMD

    wir habn dafür 3 datein ( wortliste_bio.txt, wortliste_deutsch.txt, wortliste_jargon.txt) die werd ich euch allerdings nicht aufbrummen, schreibt einfach eine txt datei mit 3 oder 4 wörtern die nicht sortiert sind das sollte zu testzwecken vorerst reichen :)


    Vielen Dank im vorraus
    mfg
    Zuul



    Re: Malloc Verständnisproblem Teil 2 !

    Zuul - 10.01.2007, 14:33


    ... ok ... durch glückliche fügungen hat sichs schon aufgeklärt ^^


    falls es jemanden intressiert .. hier der funktionierende code ; )


    Code: #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define Zeilenlange 100

    int vergleich(const void **Var1,const void **Var2);
    int allocn(char Dateiname[]);

    int vergleich(const void **Var1,const void **Var2)
    {
       return strcmp(*(char**)Var1,*(char**)Var2);
    }

    int allocn(char Dateiname[])
    {
       int wortanz=0,wortlang,i=0,j=0;
       char Zwischenspeicher[Zeilenlange];
       FILE *datei;
       char* zwischen=NULL;
       int* pcPointer=NULL;
       int c;

       datei=fopen(Dateiname, "r");                           /*Datei Öffnen*/
       if(datei==NULL)
       {
          fprintf(stderr, "Konnte die Datei, %s, nicht finden.\n",Dateiname);   
          return EXIT_FAILURE;            
       }

       while(fgets(Zwischenspeicher,Zeilenlange,datei))            /*Wörter in Zwischenspeicher schreiben*/
       {
          wortanz++;
          printf("%s",Zwischenspeicher);
       }
       rewind(datei);                                       /* Datei wieder an den Anfang setzen*/
       
       pcPointer=(char*)malloc(wortanz*sizeof(char*));               /* Erstellen einer Wortliste */
       if(pcPointer==NULL)
       {
          printf("Konnte nicht allokieren.\n");
       }
       j=0;                                             /* Zähler für die Wortliste */
       while(fgets(Zwischenspeicher,Zeilenlange,datei))            /* Wörter in einen Zwischenspeicher kopiern */
       {
          for(i=0;i<sizeof(Zwischenspeicher);i++)
          {
             if(Zwischenspeicher[i]=='\n')
             {
                Zwischenspeicher[i]='\0';
                break;
             }
          }            
       
          wortlang=strlen(Zwischenspeicher)+1;   
          zwischen=(char*)malloc(wortlang*sizeof(char));
          
          if(zwischen==NULL)
          {
             printf("Konnte Wort nicht anlegen.\n");
             return EXIT_FAILURE;
          }
       
          *(pcPointer+j)=(int)zwischen;
          j++;
                
       
       
       for(i=0;i<wortlang;i++)
          {
             *(zwischen+i)=Zwischenspeicher[i];
          }
       }
       for (c=0;c<wortanz;c++)
       {
          printf("%d %s\n",c,(pcPointer[c]));
       }
       qsort(pcPointer,wortanz,sizeof(int*),vergleich);                     /* Sortieren*/   
       for(j=0;j<wortanz;j++)
       {
          printf("Nr:%d, %s\n",j,pcPointer[j]);                           /*Ausgabe*/
       }

       fclose(datei);
       free(pcPointer);
       free(zwischen);
       printf("------------------------------------------------------------------------------\n");
       return EXIT_SUCCESS;
    }



    int main(int argc,char *argv[])
    {
          
       int laufvariable=1;

       printf("Ihre angegebenen Dateinamen: ");
       for(laufvariable;laufvariable<argc;laufvariable++)
       {
          if(argv[laufvariable] != NULL)
          {
             printf("%s, ",argv[laufvariable]);
             allocn(argv[laufvariable]);
          }
          if(argv[laufvariable]==NULL)
          {         
             break;
          }
       }
          
       
       if(argv[1]==NULL)                                          /*Fehler Abfangen*/
       {
          printf("Kein Parameter angegeben! Programm bitte aus der CMD starten!");                           
       }
       getchar();
       return 0;


    }



    mfg
    Zuul



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Tutorials.at

    OpenGl Tutorial - gepostet von c# am Dienstag 26.06.2007
    Units - gepostet von C+++ am Montag 29.01.2007
    Männlich- Weiblich zeichen - gepostet von DrPhil_Guth am Sonntag 23.04.2006
    Knifflige fehler im kleinem programm - gepostet von aimheld am Samstag 23.09.2006
    Leerzeichen lesen - gepostet von detewe89 am Donnerstag 31.05.2007
    Befehle / Funktionen - gepostet von Walgo am Mittwoch 18.07.2007
    Textdatei bearbeiten - gepostet von tarzipan7 am Dienstag 20.11.2007



    Ähnliche Beiträge wie "Malloc Verständnisproblem Teil 2 !"

    Bilder 10.07.2007 (Teil 2: Hauptbahnhof) - Josef D. (Donnerstag 12.07.2007)
    Ich baue uns ein Haus Teil 2 - nordseeengel (Dienstag 20.09.2005)
    Dieser Teil des Forums soll sich mit Vorfällen und .... - derdenker (Freitag 19.03.2004)
    Eigene Erfahrungen Teil 2 - blackangellady (Donnerstag 12.07.2007)
    Sex (ismus) in der Werbung = Self Fulfilling Prophecy ? - ABAS (Donnerstag 28.10.2010)
    Finale ohoh oder Braunschweig Teil 2 - Olaf S. (Montag 20.09.2004)
    2. Teil unseres Turnieres - medi (Mittwoch 26.05.2004)
    Die Unendliche Geschichte teil 2 - Anonymous (Mittwoch 23.06.2004)
    Sasser Teil 2 - K-A (Mittwoch 19.05.2004)
    Bilder posten - Skyhook (Donnerstag 11.11.2010)