c++ - EasyBMP c++ 的 RGBApixel 内存问题

标签 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;
}

我在“delete myPixel”行中收到以下错误:malloc: * error for object 0x7fff5fbff9d0: pointer being freed was not allocated * 在malloc_error_break 设置断点调试

为什么没有正确分配?

最佳答案

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

返回对象 RGBAPixel 的拷贝

编辑

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

关于c++ - EasyBMP c++ 的 RGBApixel 内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4813292/

相关文章:

c++ - Hex_string 到 uint8_t msg[]

c++ - QLcdNumber 奇怪的行为

c++ - 使用 2 个 char[] 指针列表初始化一个 vector<string>

linux - 逻辑地址(虚拟地址空间)而不是物理地址空间的原因

c++ - boost::shared_ptr 作为数据成员,如何在构造函数中赋值?

ios - 使用 [Class retain] : message sent to deallocated instance 使 iOS 应用程序崩溃

c++ - 这个模板部分特化代码有什么问题?

c++ - 使用 send() 发送大于 MSS 的数据

c - 与 "int *"类型的参数不兼容

c++ - 将 float 转换为长指针并返回到 float 指针