Elon
Elon
Хочется просто решать проблемы))
Elon
Гамлет
Гамлет
SexNbaKef
Влад
; не хватает?
Влад
👀😂
Влад
Ну я не вижу стандартного вызова библиотек ,эт конечно глупо ,но почему бы и нет
SexNbaKef
SexNbaKef
https://pvs-studio.com/ru/blog/posts/csharp/0856/
SexNbaKef
очень типовая задачка с офисом, постоянно встерчается
Борисов
Так в чем ошибка то?)
В цикле создается объект 'partial_piece_info pi', потом с ним какие-то действия, а последним шагом инициализируется поле pi.blocks. А потом переход на новую итерацию и объект pi уничтожается
Борисов
Зачем инициализировать поле pi.blocks ?
SexNbaKef
В чем здесь ошибка - я не понял
SexNbaKef
Борисов
Смотря что понимать под ошибкой
SexNbaKef
выброс в исключение
Борисов
Тут, скорее всего, задача не на знание синтаксиса С++
SexNbaKef
Здесь тупо найти причину ошибки
SexNbaKef
Если скажу какое исключение выдаст, сразу поймут все
Борисов
Какой ошибки ?) У тебя в примере часть кода - это '....' и объявления класса нет
Andrii
q->begin() и q->end()
Борисов
Там нет объявления q )
Борисов
В функцию заходит queue ))
Andrii
В функцию заходит queue ))
Ну... в целом не факт, что можн написать код так, что он не будет вылетать, просто переопределив всё что тебе надо
Борисов
Обращение по указателю
SexNbaKef
не в том плане. Можно обращаться и используя методы класса
Влад
А почему const в конце в первой строке?
Борисов
Потому что метод класса константный
Борисов
https://ravesli.com/urok-123-klassy-i-const/#toc-1
Борисов
"Константные методы классов"
SexNbaKef
Простая ошибка, но каверзная
Гамлет
Борисов
Декремент от 0
SexNbaKef
SexNbaKef
Борисов
Я и написал про декремент от 0
Борисов
deviceCount = 0
SexNbaKef
.Lenght - это и есть инт
Борисов
Потом идет безусловный декремент
SexNbaKef
SexNbaKef
А в чем ошибка то?
Andrii
Ну и... а вдруг логика программы такая, что Length в данном месте больше нуля?
SexNbaKef
Борисов
Всё может быть :)
SexNbaKef
Кусок кода на это и заточен, найти строку, которая может выбивать в исключение
Гамлет
Аа
Гамлет
Ну тогда очевидно что 10 строка
Andrii
Гамлет
В остальном выполняются простые операции
Andrii
Этот код, например, прекрасно выполняется и не падает:
#include <iostream>
#include <vector>
struct picker
{
int blocks_per_piece(int) { return 10; }
};
struct partial_piece_info
{
void * blocks;
~partial_piece_info() { std::cout << blocks << std::endl; }
};
struct torrent
{
void get_download_queue(std::vector<partial_piece_info>* queue) const;
picker * m_picker;
};
typedef int piece_index_t;
char blk[1024];
void torrent::get_download_queue(std::vector<partial_piece_info>* queue) const
{
const int blocks_per_piece = m_picker->blocks_per_piece(piece_index_t(0));
std::vector<int> q = {1, 2, 3};
int counter = 0;
for (auto i = q.begin(); i != q.end(); ++i, ++counter)
{
partial_piece_info pi;
pi.blocks = &blk[std::size_t(counter * blocks_per_piece)];
}
}
int main()
{
torrent instance;
instance.m_picker = new picker();
instance.get_download_queue(nullptr);
delete instance.m_picker;
return 0;
}
Гамлет
Емае
Andrii
Этот код, например, прекрасно выполняется и не падает:
#include <iostream>
#include <vector>
struct picker
{
int blocks_per_piece(int) { return 10; }
};
struct partial_piece_info
{
void * blocks;
~partial_piece_info() { std::cout << blocks << std::endl; }
};
struct torrent
{
void get_download_queue(std::vector<partial_piece_info>* queue) const;
picker * m_picker;
};
typedef int piece_index_t;
char blk[1024];
void torrent::get_download_queue(std::vector<partial_piece_info>* queue) const
{
const int blocks_per_piece = m_picker->blocks_per_piece(piece_index_t(0));
std::vector<int> q = {1, 2, 3};
int counter = 0;
for (auto i = q.begin(); i != q.end(); ++i, ++counter)
{
partial_piece_info pi;
pi.blocks = &blk[std::size_t(counter * blocks_per_piece)];
}
}
int main()
{
torrent instance;
instance.m_picker = new picker();
instance.get_download_queue(nullptr);
delete instance.m_picker;
return 0;
}
$ valgrind ./test
==6970== Memcheck, a memory error detector
==6970== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==6970== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==6970== Command: ./test
==6970==
0x30b140
0x30b14a
0x30b154
==6970==
==6970== HEAP SUMMARY:
==6970== in use at exit: 0 bytes in 0 blocks
==6970== total heap usage: 4 allocs, 4 frees, 73,741 bytes allocated
==6970==
==6970== All heap blocks were freed -- no leaks are possible
==6970==
==6970== For counts of detected and suppressed errors, rerun with: -v
==6970== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Andrii
Всё, прекрасно, C++ код, где ты просил привести ошибку, выполнился без ошибок
Борисов
По коду торрента - если смотреть в разрезе когда может быть вызвано исключение - то используется тип int - 'const int blocks_per_piece = m_picker->blocks_per_piece(piece_index_t(0)); ' и далее для индексации в массиве. И вот если вдруг, там будет -1... -2 ... -3 ..
Andrii
Борисов
)))
Борисов
struct picker
{
int blocks_per_piece(int) { return -1; }
};
SexNbaKef
SexNbaKef
Ты здесь знаешь число
SexNbaKef
PVS-Studio: поиск ошибок в коде программ
✅Правильный ответ: в данном случае явное приведение типа к size_t используется для корректного доступа к элементам массива. Проблема здесь в том, что оба операнда являются знаковыми целыми числами и при их перемножении может возникнуть переполнение.
Гамлет
Ясно, сходка крестоносцев началась, надо ливать
SexNbaKef
МОЖЕТ возникнуть ошибка
Oleg
Если вы не знаете, что делать после освоения языка и азов программирования, то ещё раз вставлю ссылку: https://github.com/firstcontributions/first-contributions/blob/master/translations/README.ru.md
Если же вы ищите идею для своего проекта, то вот некоторые идеи из нашего недавнего опроса идей (https://forms.gle/1jETpD5TkyA8jJfBA):
"Парсинг госреестров, которые не предоставляют сервисы API и выдача этих данных через свой АPI-сервис"
"Блокчейн-игры"
"Телеграмм-боты, с полезной информацией. Например, Python roadmap-bot"
"Чат-бот расходов и доходов семьи с прогнозированием на полгода"
"Чат-бот помощник"
"Бот, который шлет либо ссылку либо торрент на фильм. поиск фильма по жанрам. фильм/книга/сериал и т.п."
SexNbaKef
Но не обязательно, что она будет
Борисов