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
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.