返回后释放一次性变量
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
值。
我有一个函数可以监听 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
值。