Seltsames Phänomen mit Arrays



  • hi,

    Ich hab einfach mal ein Programm geschrieben welches Absichtlich über die Grenzen eines Arrays hinausschreibt, einfach um auszuprobieren was passiert.
    Dabei passiert etwas seltsames, die Schleife macht ein paar 100 oder ein paar 1000 durchläufe bis das Programm abstürzt.
    Kann mir vielleicht jemand sagen warum es überhaupt funktioniert und nicht direkt abstürzt? Und warum kann ich dann auchnoch das Array auslesen?

    hier der code:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    	int array[7];
    	int feld = 1;
    	int wert = 1;
    	do
    	{
    		array[feld] = wert;
    
    		cout << "wert des " << feld << ". feldes: " << wert << endl;
    
    		feld++;
    
    	}while(5>4);
    
    	return 0;
    }
    

    vielen dank schonmal



  • Da gibts nichts zu erklären, das nennt sich undefiniertes Verhalten.

    Aber bei deinem Fall geht das so lange gut, weil du auf Speicher zugreifst der dir gehört, wenn das Programm abstürzt, hast du das Gebiet verlassen/was wichtiges überschrieben oder sonst wie was kaputt gemacht.



  • ah, vielen dank für die Antwort, da bin ich gleich schlauer und ein wenig deprimiert, das Debugging wird dadurch noch verzwickter....



  • du kannst dir selbstverständlich eine array-klasse basteln, die checkt, ob ein zugriff erlaubt ist. natürlich wird der zugriff dadurch auch etwas langsamer, aber dafür bist du dann gegen buffer-overflows gewappnet. wenn du boost::array verwendest, kannst du die methode at benutzen, um den zugriff auf elemente checken zu lassen. wenn der index groesser/gleich der element-anzahl ist, wird eine exception vom typ std::range_error geworfen. der operator[] greift allerdings (offensichtlich aus performance-gründen) weiterhin ungehütet auf die elemente zu.


Log in to reply