Speicherzugriffsverletzung wie umgehen??



  • Hallo,
    ich habe folgendes Problem:
    Ich lese eine Datei ein und soll die Wörter darin zählen mittels doppeltem hashing.
    Soweit so gut, zählen und eintragen klappt.
    Allerdings bekomme ich einen fehler wenn ich auf die Anzahl der Wörter zugreifen will wenn an einer Stelle in meienr Hashtabelle kein Eintrag ist.

    struct word {
                 char word[MAX];
                 unsigned int counter;
                 }countedword;
    
    struct word *hash_tabelle[MAX_HASH];
    struct word *insert(char *);
    

    dann lese ich ein in ein array MAX_HASH=4999

    wenn ich dieses Array nun abfragen will:

    for (int i=0; i<5000;i++)
    {
     printf("%i : %s Anzahl: %i\n ",i,hash_tabelle[i],hash_tabelle[i]->counter);
     }
    

    bekomme ich jedesmal einen Speicherzugriffsfehler wenn auf ein Teil des Arrays zugegriffen wird in dem für counter kein Eintrag ist.

    greife ich z.B. direkt auf
    hash_table[4666]->counter
    zu, bekomme ich die korrekte anzahl der Wörter.

    wie kann ich das ganze nun so schreiben das er durchläuft und dort wo ein eintrag ist mir counter ausgibt?

    Danke andy2k



  • Sorry habe meinen Fehler nach einer kurzen pause selber gefunden.
    Manchmal ist ne kleine Pause nicht verkehrt!!

    for (int i=0; i<5000;i++)
       {
         if (hash_tabelle[i]==0)
    	{	
    		printf("Zelle: %i Die Zelle ist leer\n",i,hash_tabelle[i]);
    	}
    	else{
    		printf("Zelle: %i Wort: %s  Anzahl: %i\n ",i,hash_tabelle[i],hash_tabelle[i]->counter);
            }     
       }
    


  • andy2k schrieb:

    printf("Zelle: %i Wort: %s  Anzahl: %i\n ",i,hash_tabelle[i],hash_tabelle[i]->counter);
    

    sehr dirty. Benutz lieber:

    printf("Zelle: %i Wort: %s  Anzahl: %i\n ",i,hash_tabelle[i]->word,hash_tabelle[i]->counter);
    

Anmelden zum Antworten