首页 > 解决方案 > 返回后释放一次性变量

问题描述

我有一个应该在 Windows 控制台上侦听输入的函数。它使用 conio.h。它每秒会被调用大约 20 次。

我怎样才能防止我的记忆被堵塞?据我了解C,它每次都会初始化一个新的字符。我不能使用单个公共内存位置。该函数必须是完全自封装的。

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();
    }
}

标签: cmemory-managementscopelifetime

解决方案


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

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

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

char listen() {

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

也就是说,getch()返回一个int,所以你最好也改变listen()函数的返回类型来返回一个int值。


推荐阅读