【发布时间】:2015-01-29 21:46:49
【问题描述】:
假设我有 3 个功能:
int A(void);
string B(const string& fileName);
void C(string& dataFromFile);
A() 调用 B() 并使用 B() 的返回值作为 C() 的输入参数。在这种情况下,我想在 B() 中打开文件并将文件中写入的数据读取到缓冲区中。然后我想将此数据作为字符串返回。如何实现 B() 以避免内存泄漏?因为下面的伪代码会导致内存泄漏。
string B(const string& fileName) {
// open file
char* buffer = new char[sizeOfFile];
// read from file and assogn the data to buffer
return buffer;
}
【问题讨论】:
-
留在
std::string或char *。不要混合它们,否则你会遇到你面临的问题(以及更多)。您可以将文件读入std::string,这将解决您的问题;或者声明函数返回char *。 -
从缓冲区显式创建返回值字符串,然后删除缓冲区。字符串的缓冲区独立于 ctor 参数。
-
文件是肯定全文?有多种方法可以做到这一点,this being one。
标签: c++ memory-leaks return-value