170 похожих чатов

Может кто подсказать из-за чего при вызове деструктора в классе

вылазит ошибка "Unhandled exception: Stack cookie instrumentation code detected a stack-based buffer overrun."?

Код только конструкторов и деструкторов: https://pastebin.com/ae0j1hDh

Весь код: https://pastebin.com/2bpJ2cvN

4 ответов

17 просмотров

class Matrix { public: ...     int** arr;     Matrix();     Matrix(int r_count, int c_count, int num...);     Matrix(int** _arr, int r_count, int c_count);     ~Matrix();     string sumMatrix(Matrix _matrix);     string multiplyMatrix(Matrix _matrix); ...     bool isEqual(Matrix _matrix); };

Aidar Fattakhov
class Matrix { public: ...     int** arr;     ...

конструктор берёт указатель на любые данные (даже если они не созданы через new[], например, это массив на стеке), а деструктор норовит их обязательно удалить через delete[]. Независимо от того, в этом ошибка, или нет, так делать нельзя. Если класс выделил память - пусть сам и чистит, если не выделял - очистка - не его обязанность. Это(гуглить про идиому RAII) очень важный принцип, который нужно соблюдать. Короче, правильный Matrix должен либо копировать себе содержимое массива, который ему дали в конструкторе, либо забирать только при условии, что владельцем становится только он. Если с move-семантикой вы пока ещё не знакомы - лучше всегда безусловно копировать любые входные данные.

Влад- Автор вопроса
Anton Semenov
конструктор берёт указатель на любые данные (даже ...

Я в конструкторе присваиваю arr то что передано через конструктор, разве это не копирование? Просто код не работает только когда деструктор существует, если я его комментирую, то все функции выполняются, но конструктор по любому нужен и я не понимаю как его починить

Влад
Я в конструкторе присваиваю arr то что передано че...

если речь о конструкторе Matrix::Matrix(int** _arr, int r_count, int c_count) - то точно нет. Там копируется _указатель_, а не данные, на которые он указывает.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта