2014-08-29 33 views
1

我现在正在做作业。有一件事让我困惑,我需要你的建议。 这个问题对于内存分配来说非常简单和基本。学习C语言后,我正在学习C++入门书。所以我更喜欢使用newdelete来做内存分配,这让我无法解决这个问题。这是问题。功能getNewFrameBuffer用于为framebuffer : (sizeof)Pixel x width x height分配分配内存,请注意Pixel是用户定义的数据类型。然后返回分配内存的指针。如何分配内存使用C++而不是C 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; 
} 

然而,当我尝试使用新的关键字来分配内存会导致程序意外终止:当我使用如下malloc()功能,它工作正常。这里是我的代码:

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

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

回答

4

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

行更改为

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

谢谢黑暗,你指出了问题,并提供了一个解决方案:)我会小心,并尽我所能找出我想分配。谢谢! – Zengrui 2014-08-29 02:30:19

+0

这样做的更多C++方法将是“新像素[宽度*高度]” – Beanz 2014-08-29 03:13:16

+0

更多的C++方式这样做是'std :: vector (width * height)'。 – chris 2014-08-29 03:22:18

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

注意*;

+0

你试图创建字符指针数组或指向字符数组。因为它看起来像你还应该做 * framebuffer = new char [sizeof(Pixel)* width * height]; – 2014-08-29 02:19:50

+0

哦,我看到了,我想创建一个字符数组。谢谢!!提请:) – Zengrui 2014-08-29 02:27:24