Deutsche Lernausgabe
Speicherzugriffsfehler in C
Finden Sie ungültige Speicherzugriffe und korrigieren Sie die Lebensdauer von Objekten.

Ein uninitialisierter Zeiger, ein Index außerhalb der Grenzen oder ein bereits freigegebenes Objekt können einen ungültigen Zugriff verursachen. Das Verhalten ist undefiniert: Ein sichtbarer Speicherzugriffsfehler tritt nicht zwingend bei jeder Ausführung auf.
Verkleinern Sie das Programm auf einen möglichst kleinen reproduzierbaren Fall. Prüfen Sie Grenzen, das Ergebnis von malloc und die Lebensdauer jedes Objekts. Geben Sie nicht die Adresse einer lokalen automatischen Variablen zurück, deren Funktion beendet wird.
Ein Debugger oder AddressSanitizer kann den fehlerhaften Zugriff lokalisieren, wenn Ihre Umgebung dies unterstützt. Beheben Sie die Ursache und testen Sie anschließend auch leere Arrays und Grenzgrößen.
Quellcode
#include <stdio.h>
int main(void)
{
int values[] = {10, 20, 30};
size_t count = sizeof values / sizeof values[0];
for (size_t i = 0; i < count; ++i) {
printf("values[%zu] = %d\n", i, values[i]);
}
return 0;
}Im Compiler öffnenHäufige Fragen
Warum bleiben Code und manche Ausgaben englisch?
C-Schlüsselwörter, Bezeichner, Programmkommentare und erwartete Ausgaben bleiben wie im Original, damit der Code ausführbar und die Tests konsistent bleiben. Erklärungen und Aufgabenstellungen sind übersetzt.