Мне интересно, почему этот маленький мир кода протекает в памяти? Он переворачивает изображение по горизонтали и возвращает структурное изображение в мой основной файл.Почему происходит утечка кода?
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);
}
Ничто не должно быть неправильно в главном файле, потому что все мои другие функции делают хорошо ... Но вот мир основной, который посылает и возвращения к-структуру функции:
case 5:
//Flipping the image on its diagonal.
printf("Flipping the image on its diagonal...");
turnImg(&plain);
printf("Image flipped.\n");
break;
и главный файл заканчивается:
for (unsigned int i = 0; i < plain.height; i++) {
free(plain.pixels[i]);
}
free(plain.pixels);
getchar();
return 0;
Тем не менее, то, что я заметил, что высота и ширина замены является частью проблемы, но я не знаю, как я буду в состоянии сделать это без swa п.
Вы используете 'malloc' на' из tmp-> пикселей [я] ', но в конце концов, вы делаете' свободный (img-> пикселей [I]) 'вместо' свободный (TMP -> пикселей [я]) '. Когда вы освобождаете 'tmp' в конце, все выделенные пиксели на' tmp' теряются. Возможно, это проблема? –
Вы должны прочитать [Я делаю результат malloc?] (Http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc) – Stargateur
Конечно, замена значений пикселей отражает образ. Попробуйте это на бумаге с матрицей размером 3 × 2 со значениями, указанными 'a'' 'f'. –