0 Tage Serie
c / intermediate
Snippet

Speicherlecks mit realloc vermeiden

Verwenden Sie bei realloc immer einen temporären Zeiger. Wenn realloc fehlschlägt, gibt es NULL zurück, aber der ursprüngliche Speicher bleibt belegt.

snippet.c
c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdlib.h>
#include <stdio.h>
int main() {
int *arr = malloc(2 * sizeof(int));
if (!arr) return 1;
int *temp = realloc(arr, 10 * sizeof(int));
if (!temp) {
free(arr);
return 1;
}
arr = temp;
free(arr);
return 0;
}
Erklärung
1
int *temp = realloc(arr, ...);
Ergebnis in temp speichern, um die Originaladresse bei Fehlern nicht zu verlieren.
2
if (!temp) { free(arr); }
Den ursprünglichen Puffer explizit freigeben, wenn die Erweiterung fehlschlägt.