gpt4 book ai didi

c++ - 如何使用 C++ new 而不是 C malloc 分配内存

转载 作者:太空宇宙 更新时间:2023-11-04 01:29:24 26 4
gpt4 key购买 nike

我现在正在做作业。有一件事让我感到困惑,我需要你的建议。关于内存分配的问题非常简单和基本。学习C语言后,我目前正在学习C++ Primer这本书。所以我更喜欢使用 newdelete 来进行内存分配,但这个问题让我失败了。这就是问题所在。 getNewFrameBuffer 函数用于为framebuffer 分配内存:(sizeof)Pixel x width x height,请注意Pixel 是用户定义的数据类型。然后返回分配内存的指针。当我使用 malloc() 函数时它工作正常,如下所示:

char* m_pFrameBuffer;
int width = 512, int height = 512;
//function call
getNewFrameBuffer(&m_pBuffer, width, height);

//function implementation using malloc
int getNewFrameBuffer(char **framebuffer, int width, int height)
{
*framebuffer = (char*)malloc(sizeof(Pixel) * width *height);
if(framebuffer == NULL)
return 0;
return 1;
}

但是,当我尝试使用 new 关键字分配内存时,它会导致程序意外终止。这是我的代码:

int getNewFrameBuffer(char **framebuffer, int width, int height)
{
framebuffer = new char*[sizeof(Pixel) * width *height];
if(framebuffer == NULL)
return 0;
return 1;
}

我的代码有什么问题?非常感谢大家:)

最佳答案

您应该使用 new char 而不是 new char* 进行分配,因为 new char* 将分配那么多指针。这导致您从 *frameBuffer = 中删除 *,这意味着调用者的 frameBuffer 参数不会更改。

将行改为

*framebuffer = new char[sizeof(Pixel) * width *height];

关于c++ - 如何使用 C++ new 而不是 C malloc 分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25560724/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com