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
相关产品推荐
相关产品推荐

