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