如何在分配内存时修复此错误?

时间:2016-01-16 21:09:09

标签: c++ casting malloc

下面的代码有错误,请帮我解决这个问题。我是C ++的初学者。

int main(int    argc,   char    **argv)
{
image=malloc(3*1450*900*sizeof(char));      /*  to  ALLOCATE    MEMORY  required    to  SAVE    the file    */
    some thing else....}
  

错误是:无法将类型为“void *”的值分配给“char *”类型的实体

4 个答案:

答案 0 :(得分:5)

首先,在C ++中,您应该使用new / new[]delete / delete[]而不是malloc()

更好的方法是使用std::vectorstd::vector<char> image(3*1450*900);

如果你真的需要在C ++中使用malloc(),你需要转换返回值(malloc()返回void*):

image = (char*)malloc(3*1450*900*sizeof(char));

当然,在继续之前总是检查返回值。

答案 1 :(得分:4)

为什么它不起作用并且快速修复

您的代码无效的原因是,malloc()返回void*,无法隐式转换为char*。因此,据说malloc()不是类型安全的。您可以通过编写(char*)malloc(3*1450*900)显式地转换返回的指针,但这有点难看。 (BTW sizeof(char)始终为1.)

更现代的方法

在现代C ++中,您应该使用std::vector<T>之类的容器进行内存分配。另外:尽量避免函数和类之外的全局变量。这就是我要写的内容:

int main()
{
    std::vector<char> image( 3*1450*900 ); // automatically fills with zeros.
}

这样做的好处是,内存管理是自动完成的。当image对象被销毁时,将释放分配的内存。

答案 2 :(得分:2)

由于您使用的是C ++,因此您应该使用GetItemList创建数组,并使用new[]删除它们。

delete[]

如果您正在使用int main(int argc, char **argv) { image = new char[3 * 1450 * 900]; // ... some code here? ... // When you're finished with image: delete[] image; // ... some code here? ... return 0; } sizeof运营商,则不需要new[],但即便如此,我还要提及new 总是等于1。

如果您正在使用C ++ 11(您应该是!),那么将图像声明为sizeof(char)可能更合适,以防止由于不正确的异常处理或仅仅忘记{{1}而导致的内存泄漏}}

答案 3 :(得分:1)

你在错误报告中看到的很明显! 你应该把“=”运算符另一边的所有东西都转换为(char *)!

  

图像=(字符*)malloc的(3 * 1450 * 900 *的sizeof(char)的);