RGBApixel проблема с памятью с EasyBMP c ++ - PullRequest
1 голос
/ 27 января 2011

У меня есть следующая строка в моей функции main () (которая использует EasyBMP):

RGBApixel * myPixel = myFavoriteColor(192);

, которая определяется как:

RGBApixel * myFavoriteColor(int intensity)
{
RGBApixel color;
color.Red   = 0;
color.Green = intensity/2;
color.Blue  = intensity;
return &color;
}

, и я получаю следующееошибка в строке с надписью «удалить myPixel»: malloc: * ошибка для объекта 0x7fff5fbff9d0: освобожденный указатель не был выделен * установить точку останова в malloc_error_break для отладки

Почему не получаетсяраспределен правильно?

1 Ответ

1 голос
/ 27 января 2011

Вы возвращаете адрес локальной переменной color, который не будет действительным после выхода из функции myFavoriteColor. Объект color будет уничтожен в конце функции. Вместо этого верните копию объекта RGBAPixel, сменив сигнатуру функции на RGBAPixel myFavoriteColor(int) и используя return color;

EDIT

Вам также нужно изменить RGBApixel * myPixel = myFavoriteColor(192); на RGBApixel myPixel = myFavoriteColor(192);. Я считаю, что вы должны прочитать C ++ книгу , прежде чем идти дальше, поскольку это очень основные понятия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...