PDA

Просмотр полной версии : [Вопрос] Нужно ли очищать значение переменной?



wotzgdzcvgaukq
16.02.2022, 09:58
Всем привет! К примеру, есть такой код:


// --- Includes ---

#include <../include/a_samp.inc>

main() {}

// --- Database variable ---

new DB:database;

// --- Enums ---

enum players {
name[MAX_PLAYER_NAME + 1]
};

new player[MAX_PLAYERS][players];

// --- Gamemode publics ---

public OnGameModeInit() {
database = db_open(!"database.db");
return 1;
}

public OnGameModeExit() {
db_close(database);
return 1;
}

// --- Player publics ---

public OnPlayerConnect(playerid) {
player[playerid][name][0] = 0;

GetPlayerName(playerid, player[playerid][name], MAX_PLAYER_NAME + 1)

//

new registrationCheck_query[51 - 2 + 1 + MAX_PLAYER_NAME + 1], DBResult:registrationCheck_resultQuery;
format(registrationCheck_query, sizeof(registrationCheck_query), "SELECT * FROM `players` WHERE `name` = '%s' LIMIT 1", player[playerid][name]);
registrationCheck_resultQuery = db_query(database, registrationCheck_query);

if(db_num_rows(registrationCheck_resultQuery))
// Код с авторизацией
else
// Код с регистрацией

// db_free_result(registrationCheck_resultQuery);
return 1;
}


Так вот, нужно ли в конце условного ветвления выполнять функцию db_free_result для очистки значения переменной с результатом запроса или можно опустить этот момент? Ещё такой вопрос: лучше создать глобальную переменную, к которой я буду обращаться, если мне нужно будет работать с данными из запроса, или каждый раз создавать новую?

DeimoS
16.02.2022, 10:50
нужно ли в конце условного ветвления выполнять функцию db_free_result для очистки значения переменной с результатом запроса

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



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

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