for Schleife

Gast #2085977
Lesenswert?

Hallo,

ich habe ein kleines Verständnisproblem bei einer for Schleife.
*key ist ein Zeiger auf ein 10Stelliges Char Array
Die Funktion berechnet einen Hashwert, und funktioniert prinzipiell 
auch(ist aber nicht auf meinem Mist gewachsen)

Ich untersuche das ganze nun mit Valgrind, da das Programm manchmal bei 
eben dieser for Schleife mit einem "Invalid read of size 1" crasht.
Ich sehe da eigentlich nicht wirklich eine typische 
for-Abbruchbedingung, aber es funktioniert ja(meistens)

Generiert das *ptr++ irgendeinen Rückgabewert der die for-Schleife 
weiterlaufen/abbrechen lässt, wenn man am Ende des Arrays angekommen 
ist?
1
hash_t CDB::_db_hash(CONST char *key) {
2
    hash_t hval;
3
    char   *ptr;
4
    char   c;
5
    int     i;
6

7
    hval = 0;
8
    for (ptr = (char *)key, i = 1; c = *ptr++; i++) {
9
        hval += c * i;  // ascii char times its 1-based index
10
    }
11
    return(hval % DB_NHASH_DEF);  
12
}

Ich frage mich nun, was der Grund dafür sein kann, das es manchmal 
funktioniert und manchmal nicht.

Danke schon mal, falls mir jemand den genauen Ablauf der Schleife 
verklickern kann

funky

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren