toster_bodnar, Добавлять указатель на объект, вместо объекта. "M* m" вместо "M m". Можно создавать указатели на неопределённый тип. При этом определение и реализация классов должна быть в разных файлах.
impelix, чтобы добавить в очередь пару чисел, это должна быть очередь пар.
std::queue<int> q1; // сюда пару вставить нельзя
std::queue< std::pair<int,int> > q2; // сюда можно только пару вставить
q1.empace( 1 );
q2.emplace( 2, 3 );
MuffinLover, while(rawWavFile) и while( !rawWavFile.fail() ) - одно и то же и было правильно. Правильнее, чем rawWavFile.eof(). значит seekg в конце цикла передвигал не в eof положение и следующая итерация запускалась, но считать уже ничего не получалось и chunk оставался старый, а на следующей итерации уже fail срабатывал.
MuffinLover, ну после eof не стоит ничего читать из файла. А после двух eof - тем более!
Не знаю, UB или не UB, скорее всего, чтение файла после eof не происходит и в chunk остаётся "мусор" с прошлого раза. Я бы ожидал, что исключеие кинет, но, не кидает, как видим.
В начале цикла while проверяй, что не eof. Вообще перед каждым чтением проdеряй, что не eof.
MuffinLover, после "if( chunk.chunkId == CT_fmt )" ты ничего не записываешь в chunk, но ожидаешь, что тип поменялся. Видимо вместо fmtChunk должен быть chunk
Urilobus, перед массивом записано, сколько байт удалять.
Можно боле ерадикально поступить и заменить массивы на std::vector. На скорости не отразится, а вручную удалять не придётся ничего. Наверняка ошибка глупая и очевидная, но я не вижу.
Urilobus, ну очевидно, что строки уже были удалены и "отрабатывает до конца" отображая мусор из памяти, который пока никто не успел перезаписать.
Для эксперимента, перед удалением векторов заполняй их числом -1, например, и у тебя окажется, что после копирования в объекте неправильные данные будут. И в отладчике отслеживай, в какой момент в скопированной матрице начинают пордтиться данные.
Выглядит так, что не обнулил указатель после копирования, но вроде всё ты обнуляешь. Визуально не вижу ошибки, так что в отладчике смотри.
Кроме вот этого места другие ошибки в глаза не бросаются
if( Mat_1 != nullptr )
{
for (int i = 0; i < rows_num; i++)
delete[] Mat_1[i];
}
Сразу подсказка на будущее: вещественные числа всегда врут. На меньше/больше/равно лучше сравнивать не прям такими операторами, а с учётом заданной погрешнсоти. Сперва сравнить на равенство, что два числа отличаются не больше, чем заданная погрешность и только потом сравнивать на меньше/больше. Вещественные числа сохраняются не точно и, условно, может получиться так, что "1.0 != 1.0". Например, будут введены расстояния в км и футах, котрые в метрах должны быть равны, но из-за погрешнсотей получится, что меньше. Или больше. Н оможет получиться и равно.
PresetX, Потому и комментарий, что это не был ответ.
Самая маленькая программа, которую мне удавалось написать на С++ + WinAPI получилась 5 килобайт и она скомпонована с msvcrt.lib. Она в коде возврата возвращает число страниц в pdf файле. Но это было в старых версиях MSVC, если не ошибаюсь, сейчас даже при статической компоновке требуется одна dll'ка, может об этом и страдания на форумах.
Не майся дурью. Я серьёзно. 20 лет назад я изучал ассемблер, чтобы даже с WinAPI в ассемблере работать, дляминимизации размера и максимизации скорости. Ведь на ассемблере будет быстрее менюшечка работать, чем на С++, "это же очевидно"(с).
Идёт 2022 год, не стесняясь использую Qt, который тащит за dll на несколько десятков мегабайт, даже для маленьких утилит, которые на "голом" С++ можно уложить в несколько сот килобайт, даже при татической линковке с CRT. Тут дело в чём, скорость и удобство разработки гораздо важнее экономии десятка мегабайт на диске. Скорость и удобство разработки важнее потери 0,01% производительности. Лишняя иконка на рабочем столе займёт больше дисковог опространства, чем микроскопическая утилита, не надо экономить на крошках. Собственно, иконка твоего приложения может занимать больше места, чем супер эффективный код на голом WinAPI.
Смысл извращаться может быть только для embeded систем, где могут быть существенные ограничения всех ресурсов. На ПК, да ещё и под Виндоус, самое главное это упростить и удешевить разработку. Сэкономленное время можно потратить на котиков в ютубе или ту же иконку приложения боее красиво перерисовать.
Не майся дурью, даже из спортивного мазохистского развлечения.