我怀疑处理C中的指针。 在我的程序执行期间,我必须打开和关闭配置文件,但由于不同的程序更新其内容,我必须在程序运行时多次这样做。所以我做了一个小函数,它读取文件并关闭它,我每次需要它时都会调用它。
List<string>
如果我没有弄错,这个函数每次运行时都会创建一个新的FILE *指针,但是我想知道是否使用范围更大的FILE *指针并且每次运行函数时都会更好。含义:
int readConfigFile()
{
FILE* pfile = fopen("path to file", "r");
fseek(pFile, 0, SEEK_END);
lSize = ftell(pFile);
rewind(pFile);
text = (char*)malloc(sizeof(char) * lSize);
if (text == NULL) {
fputs("Memory error", stderr);
return (0);
}
if (fread(text, 1, lSize, pFile) <= 0) {
printf("Nothing read");
return 0;
}
text[lSize] = '\0';
//Do the actual reading
}
我很担心,因为据我所知,C ++中没有垃圾收集器,第一个函数会创建太多的FILE *指针,如果运行的时间足够长,并且会溢出我的内存。另一方面,有一个全局指针,它将在单个函数的上下文中打开和关闭,看起来相当浪费,而且不是很模块化,至少在我看来是这样。
那么我应该回收我的指针,还是任何参考资料,或者可以根据需要申报新的指针?
提前致谢。
答案 0 :(得分:0)
您可以使用freopen()
。
http://en.cppreference.com/w/cpp/io/c/freopen
无法保证它实际上会重用为“旧”文件分配的动态内存。这个函数也可以是fclose()
和fopen()
的包装器 - 它是所有实现定义的。
从我看到的,newlib(一种流行的嵌入式目标libc)重用了FILE存储,所以这里有一个很小的收益。它是否会产生明显的差异是另一回事。