при работе по SSH некорректно работают практически все функции glutПри работе по ssh вообще сложно пробросить графический сервер, чтобы он работал адекватно. А ещё есть как минимум X и Wayland. У них разные методы удалённой отладки будут.
ощущение
-codec:a copy
должен помочь в большинстве случаев. адреса повторяются по несколько раз для 1 макМак никак не гарантирует уникальность лиза, если передана опция 61 Client-identifier. Вы замазали зачем-то кучу полезных для дебага данных, как будто вас по маку сейчас сдеанонят... DHCP сервер должен идентифицировать лизы по паре ClientID:IP, и только если не передан ClientID, использовать пару HardwareAddress:IP. Проверьте, что у вас там под замазкой.
Таймер, который больше, не просто не уменьшается, а растёт.Если он растёт, значит приходят одинаковые пары client-id(61):requested_IP и продлевают жизнь лиза, соответственно.
менял. было 3 часа, сделал 1 час. но после этого уже перезапускал и всё сбрасывалось. стоит ли делать такой малый промежуток?Не в 90х же живём. Вообще стоит 10 минут поставить время жизни, за 3 часа в 2024-м может слишком много чего произойти. Лизы по 2 дня у вас на скриншоте -- это треш какой-то. Где-то явно лишние реквесты приходят пачками.
GetUserNameW
.Advapi32.lib
.LNK2001 unresolved external symbol
и переходим по первой ссылке, которая снова, внезапно, по невероятному стечению обстоятельств оказывается документацией Microsoft.#pragma comment(lib, "Advapi32")
.#include <string>
#include <string_view>
#include <ranges>
#include <array>
#include <utility>
#include <algorithm>
#include <cassert>
#include <stdexcept>
template <typename Key, typename Value, std::size_t Size>
struct Map {
std::array<std::pair<Key, Value>, Size> data;
constexpr Value at(const Key key) const {
const auto iter = std::find_if(std::begin(data), std::end(data),
[&key](const auto& v) { return v.first == key; });
if (iter == std::end(data)) {
throw std::range_error("unknown character");
}
return iter->second;
}
};
static constexpr std::array<std::pair<std::string_view, char>, 51> MORSE_MAP = { {
{"•-", 'A'}, {"-•••", 'B'}, {"-•-•", 'C'}, {"-••", 'D'},
{"•", 'E'}, {"••-•", 'F'}, {"--•", 'G'}, {"••••", 'H'},
{"••", 'I'}, {"•---", 'J'}, {"-•-", 'K'}, {"•-••", 'L'},
{"--", 'M'}, {"-•", 'N'}, {"---", 'O'}, {"•--•", 'P'},
{"--•-", 'Q'}, {"•-•", 'R'}, {"•••", 'S'}, {"-", 'T'},
{"••-", 'U'}, {"•••-", 'V'}, {"•--", 'W'}, {"-••-", 'X'},
{"-•--", 'Y'}, {"--••", 'Z'}, {"-----", '0'}, {"•----", '1'},
{"••---", '2'}, {"•••--", '3'}, {"••••-", '4'}, {"•••••", '5'},
{"-••••", '6'}, {"--•••", '7'}, {"---••", '8'}, {"----•", '9'},
{"•-•-•-", '.'}, {"--••---", ','}, {"---•••", ':'}, {"••--••", '?'},
{"•----•", '\''}, {"-••••-", '-'}, {"-••-•", '/'}, {"-•--•", '('},
{"-•--•-", ')'}, {"•-••-•", '"'}, {"-•••-", '='}, {"•-•-•", '+'},
{"-••-", 'x'}, {"•--•-•", '@'}, {"/", ' '} } };
constexpr auto decode(std::string_view morse) {
constexpr auto map = Map<std::string_view, char, MORSE_MAP.size()>{ MORSE_MAP };
return morse
| std::ranges::views::split(' ')
| std::ranges::views::transform([](auto&& range) {
return map.at(std::string_view{ range });
})
| std::ranges::to<std::string>();
}
int main() {
const auto CODE = "•••• • •-•• •-•• --- --••--- / •-- --- •-• •-•• -••";
const auto TEXT = "HELLO, WORLD";
assert(decode(CODE) == TEXT);
return 0;
}
fopen_s
внезапно не сможет открыть файл и вернёт ошибку. Допустим, файла не существует, или на его открытие нет прав у пользователя. Ты же не проверяешь возврат результата из функции открытия и пытаешься что-то записать в F, даже если функция не смогла открыть файл и вернула ошибку. А когда она вернёт её, переменная F останется нулевыем указателем или, в первом твоём случае, вообще будет обращение к неинициализированной переменной, где ты получишь неопределённое поведение. Вот оно и ругается на эту ветку развития событий.