返回后释放一次性变量

Free a single-use variable after returning it

我有一个函数可以监听 Windows 控制台上的输入。它使用 conio.h。它每秒将被调用大约 20 次。

如何防止内存堵塞?据我了解C,它每次都会初始化一个新的char。我不能使用一个公共内存位置。功能必须完全自封装。

除了返回它的内存地址并调用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();
    }
}

Is there an easier way to remove in from memory after returning it

你不用担心,对于块作用域和自动存储期限的变量,一旦作用域结束,它们的生命周期也结束了,可以自动回收内存。作为程序员,您不必采取任何额外的行动。

也就是说,任何半正经的编译器都会将代码优化为如下所示,以避免使用任何临时变量。

char listen() {

    if (kbhit()) { // Some key was pressed
        return getch(); // Which key?
    }
   return 0;
}

也就是说,getch() return是一个int,所以你最好把listen()函数的return类型改成return 也是一个 int 值。