Memory Problem?



  • Hallo,

    ich glaube das ich eine kleines Speicherporblem habe. Vielleicht kann mir jemand helfen:
    Ich habe eine Struktur in meine classe eingebaut:

    <Header>
    typedef struct
    {
    	long	Tick;	
    	double		Bytes;
    
    }BVALUE;
    BVALUE WorkValues[50];
    

    In der Klasse fülle ich die Werte und errechne damit einen Mittelwert. Vor jedem start mache ich:

    ZeroMemory( &WorkValues, sizeof( WorkValues ) );
    

    damit die auch wirklich für den neuen Vorgang leer sind.

    Seit dem ich aber dieses drin habe, bekomme ich beim beenden eine crash. Vorher lief alles gut. Muss ich diese WorkValues Struktur jetzt irgendwie wieder aus dem Speicher löschen? Ist das der Grund des crash? Wenn aus dem Speicher, wie?

    Danke

    Ocrana



  • Normalerweise würde ich hier das & weglassen, glaube aber, dass es auch mit gehen sollte. An dem hier gezeigten Stück Code sind sonst eigentlich keine groben Mängel zu erkennen.



  • is was fürs CPP-Board 🙂

    ZeroMemory( &WorkValues, sizeof( WorkValues ) );
    

    Das ist hier falsch, weil WorkValues ein Zeiger auf ein Feld ist. Du übermittels also die Adresse vom Zeiger mit dem & und nicht die Adresse von deinem Feld.

    Richtig wäre

    ZeroMemory( WorkValues, sizeof( WorkValues ) );
    

    oder

    ZeroMemory( &WorkValues[0], sizeof( WorkValues ) );
    


  • Pellaeon schrieb:

    is was fürs CPP-Board 🙂

    ZeroMemory( &WorkValues, sizeof( WorkValues ) );
    

    Das ist hier falsch, weil WorkValues ein Zeiger auf ein Feld ist.

    Nö. WorkValues ist ein Array, und &WorkValues ist seine Adresse. Man kann das & hier weglassen, dadurch wird das Array in einen Zeiger auf das erste Element umgewandelt, das hat dieselbe Adresse. Aber falsch ist das & hier nicht.



  • Wenn das Code-Fragment im Header steht, könnte es Probleme mit der ODR geben. Verschieb die Definition besser in eine deiner CPP-Dateien und deklariere das Array lediglich im Header (dazu setzt du ein "extern" vor die Zeile).


Anmelden zum Antworten