如何在函数内返回值后删除指针

新手上路,请多包涵

我有这个功能:

 char* ReadBlock(fstream& stream, int size)
{
    char* memblock;
    memblock = new char[size];
    stream.read(memblock, size);
    return(memblock);
}

每次我必须从文件中读取字节时都会调用该函数。我认为它每次使用它都会分配新的内存,但是一旦我处理了数组中的数据,我该如何释放内存呢?我可以从函数外部进行吗?通过分配大块处理数据比分配和删除小块数据具有更好的性能?

非常感谢您的帮助!

原文由 Emer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 828
2 个回答

使用 delete[] 释放动态数组:

 char* block = ReadBlock(...);
// ... do stuff
delete[] block;

但理想情况下,您不要在这里使用手动内存管理:

 std::vector<char> ReadBlock(std::fstream& stream, int size) {
    std::vector<char> memblock(size);
    stream.read(&memblock[0], size);
    return memblock;
}

原文由 Georg Fritzsche 发布,翻译遵循 CC BY-SA 2.5 许可协议

只需 delete[] 完成后此函数的返回值。从外部删除它并不重要。只是在使用完之前不要删除它。

原文由 sigfpe 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题