【发布时间】:2014-03-23 09:10:00
【问题描述】:
这是我的代码:
#include <string>
#include <iostream>
#include <cstdio>
#include <cstdlib>
std::string & fileread(const char * name)
{
FILE *fp = fopen(name,"rb");
size_t sz;
int i;
char *buff;
fseek(fp, 0, SEEK_END);
sz = ftell(fp);
fseek(fp, 0, SEEK_SET);
buff = (char *)malloc(sizeof(char)*(sz+1));
buff[sz] = '\0';
fread(buff,sz,1,fp);
std::string * rtstr = new std::string(buff);
free(buff);
fclose(fp);
return * rtstr;
}
int main(int argc,char * argv[])
{
std::string file_info(fileread(argv[1]));
std::cout<<file_info << std::endl;
return 0;
}
它只是读取一个文件,并将其内容打印到屏幕上。
在函数fileread 中,我使用new std::string(buff); 得到std::string *,并将点返回。会不会导致内存泄漏?如果答案是“是”,如何避免呢?
关于在 C++ 中使用 C:fread 比 ifstream 快得多(用 10 亿个随机数测试)
我的问题是关于内存泄漏。
【问题讨论】:
-
不要在 C++ 中编码 C。使用
std::ifstream和std::string(不是std::string*)。 -
fread()与std::ifstream::read()一样快。再说一次,不要认为 C 在性能方面会获胜。 C++ 也同样出色,并且在某些情况下,性能优于 C。 -
@Nawaz 请分享一些“比 C 性能更好”的好链接。
-
@SahilSareen C++ 类型系统鼓励静态类型检查和值语义,这两者都能带来更好的优化。例如,考虑
std::sort()与qsort():C 基于函数指针(CPU 管道的最大敌人之一),另一方面,C++ 基于模板和仿函数(也就是编译器内联所有内容)。跨度> -
@SahilSareen:将使用指针(通常为
void*和函数指针)的任何代码通用 C 代码与使用模板的通用 C++ 代码进行比较。 C++ 最有可能比 C 更快。一个这样的例子是std::sort(来自 C++ 标准库)与qsort(来自 C 标准库)。
标签: c++ string memory-leaks stl