【发布时间】:2019-04-16 11:09:31
【问题描述】:
我有一个应该在 Windows 控制台上侦听输入的函数。它使用 conio.h。它每秒会被调用大约 20 次。
我怎样才能防止我的记忆被堵塞?据我了解C,它每次都会初始化一个新的字符。我不能使用单个公共内存位置。该函数必须是完全自封装的。
除了返回内存地址并调用free(*adress)之外,还有没有更简单的方法可以在返回内存后从内存中删除in?
代码:
#include <conio.h>
// Passively listen for input, return char if input, else 0
char listen() {
char in = 0;
if (kbhit()) { // Some key was pressed
in = getch(); // Which key?
}
return in;
}
void forward(void);
// Usage, for instance control a figure in a game
void main(void) {
while (game) {
char input = listen()
if (input == 'w')
forward();
}
}
【问题讨论】:
-
编译器很聪明,它们不会在每次调用函数时分配内存,它只重用旧内存(在这种情况下是堆栈)。因此,无论调用多少次函数,如果它本身没有显式分配内存,那么您的内存使用量应该是固定的和静态的。
-
没有问题:
char in是一个局部变量,因此将存储在堆栈中,并在函数返回时自动“释放”。所以你不必担心。 -
你的内存不会被上面的代码“堵塞”。当函数返回时,函数
listen中的变量存储将消失。main中的while循环中的input变量将在每次循环中重复使用。
标签: c memory-management scope lifetime