Освободите одноразовую переменную после ее возвращения - PullRequest
1 голос
/ 16 апреля 2019

У меня есть функция, которая должна прослушивать ввод на консоли 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();
    }
}

1 Ответ

1 голос
/ 16 апреля 2019

Существует ли более простой способ удаления из памяти после его возврата

Вам не нужно беспокоиться о переменных с областью действия блока и автоматическихдлительность хранения, после того как область действия закончится, их время жизни также закончится, и память может быть восстановлена ​​автоматически.Как программист, вам не нужно предпринимать никаких дополнительных действий.

Тем не менее, любой полуприличный компилятор оптимизирует код до чего-то подобного приведенному ниже, чтобы вообще избежать использования какой-либо временной переменной.

char listen() {

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

Тем не менее, getch() возвращает int, поэтому вам лучше изменить тип возврата функции listen(), чтобы он также возвращал значение int.

...