返回单次使用变量后将其释放

时间:2019-04-16 11:09:32

标签: c memory-management scope lifetime

我有一个应该在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();
    }
}

1 个答案:

答案 0 :(得分:1)

  

有没有更简单的方法可以在将其返回后从内存中删除

您不必担心,对于具有块作用域和自动存储持续时间的变量,作用域一旦结束,它们的生命周期也将结束,并且可以自动回收内存。作为程序员,您无需执行任何其他操作。

也就是说,任何半透明的编译器都会将代码优化为类似于以下内容,从而完全避免使用任何临时变量。

fromStream()

也就是说,char listen() { if (kbhit()) { // Some key was pressed return getch(); // Which key? } return 0; } 返回一个getch(),因此您最好更改int函数的返回类型以也返回一个listen()值。