Ich wundere mich, warum dieser kleine Code-Frieden undichte Speicher verloren geht? Es dreht mein Bild horizontal und gibt das struct Image an meine Hauptdatei zurück.Warum verliert der Code Speicher?
void turnImg(Image *img) {
Image *tmp = (Image*)malloc(sizeof(Image));
//swapping size between height and width
tmp->height = img->height;
img->height = img->width;
img->width = tmp->height;
//The loop is swapping every pixel from the "last" pixel to the "first" into a tmp
tmp->pixels = (Pixel**)malloc(sizeof(Pixel*)*img->height);
for (unsigned int i = 0; i < img->height; i++) {
tmp->pixels[i] = (Pixel*)malloc(sizeof(Pixel)*img->width);
for (unsigned int j = 0; j < img->width; j++) {
tmp->pixels[i][j] = img->pixels[img->width - 1 - j][img->height - 1 - i];
}
}
for (unsigned i = 0; i < img->height; i++) {
free(img->pixels[i]);
}
free(img->pixels);
//tmp gives back the pixels to img, but they are now flipped
img->pixels = tmp->pixels;
free(tmp);
}
Nichts sollte in der Hauptdatei falsch sein, weil alle meine anderen Funktionen sind wohlauf ... Aber hier ist der Friede des Hauptes welches das Senden und Zurückführen die Struktur zur Funktion:
case 5:
//Flipping the image on its diagonal.
printf("Flipping the image on its diagonal...");
turnImg(&plain);
printf("Image flipped.\n");
break;
und die Hauptdatei endet mit:
for (unsigned int i = 0; i < plain.height; i++) {
free(plain.pixels[i]);
}
free(plain.pixels);
getchar();
return 0;
doch was ich bemerkt habe ist, dass die Höhe und Breite Swap ein Teil des Problems ist, aber ich weiß, wie nicht ich in der Lage sein, dies zu tun, ohne ein Swa p.
Sie verwenden 'malloc' auf den' tmp-> Pixel [i] ', aber am Ende, Sie tun' frei (IMG-> Pixel [i]) 'statt' frei (tmp -> Pixel [i]) '. Wenn Sie am Ende "tmp" freigeben, gehen alle zugeordneten Pixel auf "tmp" verloren. Könnte das das Problem sein? –
Sie sollten lesen [Muss ich das Ergebnis von malloc werfen?] (Http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc) – Stargateur
Natürlich spiegelt das Austauschen der Pixelwerte die Bild. Versuchen Sie es auf Papier mit einem 3x2-Pixel-Array mit Werten wie "a" bis "f". –