You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++函数内分配堆内存,如何让外部指针指向该内存?

关于C++自定义文件格式读写中指针传递的问题

我正在学习C++自定义文件格式的读写,目前已通过fstream实现了基础的读写功能,但将代码拆分到独立函数时遇到了问题。

我的设想实现方式如下:

主函数

int main()
{
  const char* path = "path/to/file.dat";

  // 该指针应指向readFromFile函数内堆(heap)分配的缓冲区
  char* buffer;

  // 如何传递buffer,才能让当前作用域的指针指向函数内创建并分配的缓冲区?
  int bufferSize = readFromFile(path, buffer);

  // 将颜色数据输出到控制台
  for (int i = 0; i < bufferSize; i += 4)
  {
    std::cout << "rgba(" 
      << buffer[i] << ", "
      << buffer[i + 1] << ", "
      << buffer[i + 2] << ", "
      << buffer[i + 3] << ")" << std::endl;
  }
}

ReadFromFile函数

// 也尝试过'char* &buffer'
int readFromFile(const char* path, char* buffer)
{
  // 读取并解析文件头……
  // 文件头包含rgba数据的大小

  // 根据文件头信息为缓冲区分配内存
  buffer = new char[header.DataLength];

  // 从文件中读取数据填充缓冲区
  fs.read(buffer, header.DataLength);
  
  // 读取成功
  // 当前作用域内的buffer已填充数据

  return header.DataLength;
}

我找到了两种传递指针引用的方式:

char* buffer;

readFromFile(x, &buffer);
int readFromFile(x, char** buffer);

readFromFile(x, buffer);
int readFromFile(x, char* &buffer); // 这是我最终采用的写法

作为C++新手,内存管理和指针对我来说还是比较陌生的概念。我确信这是一个常见问题,但目前仍未找到正确的实现方式,希望有人能给予指导,非常感谢。

内容的提问来源于stack exchange,提问作者Tieske

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 15:25:15