Ihre Anwendung wird nur abstürzen, wenn Sie etwas illegal für den Rest Ihres Systems tun: Wenn Sie versuchen, auf eine virutale Speicheradresse zuzugreifen, die Ihr Programm nicht besitzt, was Ihre Hardware bemerken wird, informiert Ihr Betriebssystem, und es wird Ihre Anwendung mit einem Segmentierungsfehler beenden: Sie haben auf ein Speichersegment zugegriffen, das Sie nicht verwenden sollten.
Allerdings, wenn Sie Zugriff auf einen Zufalls Speicheradresse (das ist, was Sie getan haben: sicher a[40]
außerhalb des Arrays ist a
, aber es könnte überall sein), können Sie eine gültige Speicherzelle zugreifen konnte (was passiert ist für dich).
Dies ist ein Fehler: Sie überschreiben wahrscheinlich einen Speicherbereich, den Ihr Programm besitzt, und riskieren, Ihr Programm an anderer Stelle zu unterbrechen, aber das System kann nicht wissen, ob Sie es aus Versehen oder aus Versehen aufgerufen haben und Sie nicht töten.
Programme, die in verwalteten Sprachen geschrieben wurden (dh Programme, die in einer geschützten Umgebung laufen), würden Ihren fehlerhaften Speicherzugriff bemerken, aber C ist keine verwaltete Sprache: Sie können tun, was Sie wollen (sobald Sie schaffen keine Probleme für den Rest des Systems).
Verschlagwortet mit C, werden nicht viele Sprachen still dies schlucken. – leppie