我有一个应该在Windows控制台上侦听输入的功能。它使用conio.h。每秒大约会调用20次。
如何防止内存阻塞?据我了解,C每次都会初始化一个新的char。我不能使用单个公用内存位置。该功能必须完全自封装。
除了返回其内存地址并调用in
之外,还有更简单的方法可以将free(*adress)
从内存中删除吗?
代码:
#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();
}
}
答案 0 :(得分:1)
有没有更简单的方法可以在将其返回后从内存中删除
您不必担心,对于具有块作用域和自动存储持续时间的变量,作用域一旦结束,它们的生命周期也将结束,并且可以自动回收内存。作为程序员,您无需执行任何其他操作。
也就是说,任何半透明的编译器都会将代码优化为类似于以下内容,从而完全避免使用任何临时变量。
fromStream()
也就是说,char listen() {
if (kbhit()) { // Some key was pressed
return getch(); // Which key?
}
return 0;
}
返回一个getch()
,因此您最好更改int
函数的返回类型以也返回一个listen()
值。