gpt4 book ai didi

c++ - 栈数组变量清理

转载 作者:行者123 更新时间:2023-11-27 23:49:02 28 4
gpt4 key购买 nike

我正在使用以下函数读取文件。

void read_file(){
char buf[BUF_SIZE];
// file is a vraiable defined and assigned during initialization
int numread = pread(file->fd, buf, BUF_SIZE, file->curpos);
// other logic follows
file->buffer += buf;
}

仍然在同一个类中的以下函数计算从文件读取的缓冲区的内容。

void evaluate(){
read_file();
//evaluate the file->buffer contents
}

据我了解,当函数退出时,堆栈变量会自动“删除”,但我似乎无法理解为什么在连续调用 evauluate() 时未清除 read_file() 函数中的 buf 变量。

例如,如果我这样做;

int main(){
evaluate(); // first call works as expected
evaluate(); // second call buf variable still has contents from previous call
return 0;
}

如果能提示解决此问题的正确方向,我将不胜感激。提前致谢。

最佳答案

不管它值多少钱,都没有必要清理释放的内存。一旦它被释放并重新获取,其内容的状态就会变成“不确定”。换句话说,它可能包含上次运行的数据,但绝对没有必要。你不能依赖这个。

如果您感到困惑,建议您对缓冲区进行零初始化:

char buf[SIZE] = {};

可以看看this question .

关于c++ - 栈数组变量清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48186784/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com