Size: a a a

2021 February 23

VS

Vlad Serebrennikov in supapro.cxx
std::slavik
In general, pointer is a type of a variable that stores a link to another object.
https://en.cppreference.com/book/pointers
источник

NM

Nastya Medveda in supapro.cxx
Туночка ᅠᅠ
None єто кста обїект класса NoneType
так что сравнивать єто такое себе занятие
Похоже на печатную машинку с турецким акцентом Остапа Бендера, в которой буква Е не работала. 🙂
источник

Тᅠ

Туночка ᅠᅠ... in supapro.cxx
Nastya Medveda
Похоже на печатную машинку с турецким акцентом Остапа Бендера, в которой буква Е не работала. 🙂
источник

ID

In Dev in supapro.cxx
std::slavik
есть
Так на какую память тогда указывает нулевой указатель?
источник

Тᅠ

Туночка ᅠᅠ... in supapro.cxx
Nastya Medveda
Похоже на печатную машинку с турецким акцентом Остапа Бендера, в которой буква Е не работала. 🙂
Дякую
источник

AP

Antony Polukhin in supapro.cxx
Artem
Я пишу игру морской бой, и после хода пользователя должна быть задержа перед ходом бота
Вам нужно и поспать немного, и обработку событий окна не заморозить, при этом активные действия со стороны пользователя не ожидаются.

Яб попробовал завести sf::Clock, в основном цикле по обработке событий проверять, что прошло нужное время. Если время не прошло - вызывать небольшой сон на несколь десятков милисекунд, чтобы не кушать ресурсы процессора. Что-то типа


sf::Clock clock;
const sf::Time kSleepTime = sf::milliseconds(70);
const float kBotReactionDelay = 5.0;
//...

while(m_Window.isOpen()) {
   //...

   if (clock.GetElapsedTime() < kBotReactionDelay) {
       sf::sleep(kSleepTime);
   }
}
источник

s

std::slavik in supapro.cxx
In Dev
Так на какую память тогда указывает нулевой указатель?
с точки зрения языка - на ту в которой не может быть валидных объектов
источник

s

std::slavik in supapro.cxx
ну типа это как с нуль терминатором в строках
источник

s

std::slavik in supapro.cxx
у нас есть диапазон адресов
источник

MK

Mikhail Kalugin in supapro.cxx
In Dev
Так на какую память тогда указывает нулевой указатель?
Она правда есть, просто пользовательскому процессу туда не попасть...
источник

ID

In Dev in supapro.cxx
Ну то есть он таки указывает на "невалидную" память. Невалидную с точки зрения процесса
источник

d

dmbldr in supapro.cxx
Все ещё актуально. Хелп.
источник

d

dmbldr in supapro.cxx
Переслано от dmbldr
Подскажите, откуда тут берётся ошибка double free or corruption (out).

Основной код:
class brute_force {
public:
void impl_fill(graph g) {
   if(all_subgraphs.find(g) == all_subgraphs.end()) {
       if(g.is_reachable(_s, _d)) {
           all_subgraphs.insert(g);
           for(size_t i = 0; i < g.num_edges(); ++i) {
               g.erase_edge(i);
               impl_fill(g);
           }
       }
   }
}

void fill_set() {
   impl_fill(_g); <--вот тут вылетает
}
private:
   graph _g;
   std::unordered_set<graph, graph_hash> all_subgraphs;
};
Код класса `graph`:
class graph {
public:
   using byte = unsigned char;
   using edge_type = std::vector<std::pair<byte, byte>>;

   graph() = default;
   graph(graph const& other) = default;

   graph(edge_type edges, byte n) : edges(std::move(edges)), n(n) {};

private:
   edge_type edges;
   byte n = 0;
};
источник

s

std::slavik in supapro.cxx
и нам надо договориться какой адрес будет считаться нулевым указателем
то есть указателем который не указывает ни на один объект
удобно выбрать нулевой
источник

MK

Mikhail Kalugin in supapro.cxx
In Dev
Ну то есть он таки указывает на "невалидную" память. Невалидную с точки зрения процесса
В общем, да, если мы работаем в защищенном режиме.
источник

VS

Vlad Serebrennikov in supapro.cxx
std::slavik
и нам надо договориться какой адрес будет считаться нулевым указателем
то есть указателем который не указывает ни на один объект
удобно выбрать нулевой
для каждого типа еще свой может быть
источник

s

std::slavik in supapro.cxx
это не значит что нулевого адреса физически нет - программный счетчик начинает с 0го адреса тикать
просто обычно по нулевому адресу лежит jmp на точку входа программы
это если одно адрессное пространство
источник

ID

In Dev in supapro.cxx
dmbldr
Переслано от dmbldr
Подскажите, откуда тут берётся ошибка double free or corruption (out).

Основной код:
class brute_force {
public:
void impl_fill(graph g) {
   if(all_subgraphs.find(g) == all_subgraphs.end()) {
       if(g.is_reachable(_s, _d)) {
           all_subgraphs.insert(g);
           for(size_t i = 0; i < g.num_edges(); ++i) {
               g.erase_edge(i);
               impl_fill(g);
           }
       }
   }
}

void fill_set() {
   impl_fill(_g); <--вот тут вылетает
}
private:
   graph _g;
   std::unordered_set<graph, graph_hash> all_subgraphs;
};
Код класса `graph`:
class graph {
public:
   using byte = unsigned char;
   using edge_type = std::vector<std::pair<byte, byte>>;

   graph() = default;
   graph(graph const& other) = default;

   graph(edge_type edges, byte n) : edges(std::move(edges)), n(n) {};

private:
   edge_type edges;
   byte n = 0;
};
Подозреваю, что проблема в методе graph::erase_edge()
источник

s

std::slavik in supapro.cxx
может быть одно адрессное пространство для команд, другое для данных
и оба с 0 начинаются
источник

d

dmbldr in supapro.cxx
In Dev
Подозреваю, что проблема в методе graph::erase_edge()
Он не доходит до туда. Вылетает, когда происходит копирование графа в impl_fill
источник