使用EasyBMP c ++的RGBApixel内存问题

时间:2011-01-27 06:13:58

标签: c++ pointers memory-management

我的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”的行上收到以下错误:对象0x7fff5fbff9d0的malloc: *错误:未释放指针被释放 * 在malloc_error_break中设置断点以进行调试

为什么没有正确分配?

1 个答案:

答案 0 :(得分:1)

您将返回本地变量color的地址,该地址变量在退出函数myFavoriteColor后无效。对象color将在函数结束时销毁。而是通过将函数签名更新为RGBAPixel并使用RGBAPixel myFavoriteColor(int)

来返回对象return color;的副本

修改

您还需要将RGBApixel * myPixel = myFavoriteColor(192);更改为RGBApixel myPixel = myFavoriteColor(192);。我相信你应该在进一步阅读之前阅读C++ book,因为这些是非常基本的概念。