Ich bin neu in der dynamischen Zuordnung in c und ich bekomme Heap Korruption Fehler beim Aufruf der free()
Funktion.Heap Korruption bei der Verwendung von free()
Der gesamte Code soll die Neuzuteilungsfunktion realloc()
simulieren und es funktioniert gut bis zum Ende. Ich habe den Code im Debugger-Modus mehrmals ausgeführt und der Fehler erscheint am Ende. Wenn mir jemand helfen könnte, wäre ich sehr dankbar.
#include <stdlib.h>
#include <stdio.h>
void realocare(int **v, int n,int m)
{
int *aux;
unsigned int i;
aux = (int*)malloc(m*sizeof(int));
for (i = 0; i < m; i++)
aux[i] = v[i];
*v = (int*)malloc(n*sizeof(int));
for (i = 0; i < m; i++)
v[i] = aux[i];
free(aux);
}
void afisare(int *v, int n,int i)
{
for (i = 0; i < n; i++)
printf_s("%d ", v[i]);
printf_s("\n");
}
int main()
{
int *v;
unsigned int n,i,m;
scanf_s("%u", &n);
v = (int*)malloc(n*sizeof(int));
for (i = 0; i < n; i++)
scanf_s("%d", &v[i]);
m = n;
printf("%d", m);
afisare(v, n, i);
n++;
realocare(&v, n,m);
v[n - 1] = 9000;
afisare(v, n, i);
free(v);
return 0;
}
[Bitte lesen Sie diese Diskussion darüber, warum der Rückgabewert von 'malloc()' und Familie in 'C' nicht umgewandelt werden soll.] (Http://stackoverflow.com/q/605845/2173917). –
Hinweis: siehe 'realocare (v, n, m);' –
bei 'realocare':' v = (int *) malloc (n * sizeof (int)); ': Es ändert nicht die Variable auf dem Aufrufer Seite. – BLUEPIXY