c - 返回后释放一次性变量
问题描述
我有一个应该在 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();
}
}
解决方案
有没有更简单的方法可以在返回后从内存中删除
不用担心,对于具有块作用域和自动存储时长的变量,一旦作用域结束,它们的生命周期也结束,内存可以自动回收。作为程序员,您不必采取任何额外的行动。
也就是说,任何半体面的编译器都会将代码优化为如下所示,以避免使用任何临时变量。
char listen() {
if (kbhit()) { // Some key was pressed
return getch(); // Which key?
}
return 0;
}
也就是说,getch()
返回一个int
,所以你最好也改变listen()
函数的返回类型来返回一个int
值。
推荐阅读
- php - PHP if else 条件未按照期望结果应用
- php - 编译失败:偏移量 4 处的字符类范围无效
- php - 如果在数组中,则显示数组中的值
- python - Python 类中的嵌套对象
- python - Basic function minimisation and variable tracking in TensorFlow 2.0
- fortran - 如何在fortran给定均值和标准差的情况下从fortran中的正态分布中随机生成数字
- scala - 通过 .filter 或 create 方法在 RDD 中添加元素?
- php - 将 Wordpress“wp-admin”仪表板隐藏到用户 ID
- c++ - 如何在特定位置推回没有大小的向量?
- servicenow - SERVICENOW - 使用查询结果填充字段