Как правильно освободить динамическую память c - PullRequest
0 голосов
/ 12 апреля 2020

я проходил курс oop в c ++ и работал над этим назначением.

Класс числа, представленный в виде массива целых чисел, логическое выражение как знак числа (true равно +, false -). Программа работает нормально и делает все, что ей нужно, моя проблема в том, что она падает на конце основного, когда она добирается до обратной строки. Я обнаружил, что, удалив деструктор, который я собрал, программа работает нормально, я попытался Посмотрите, где я получаю доступ к памяти, которая не выделена и не может найти проблему с моим кодом. Ошибка, которая появляется, является ошибкой кучи, когда я добираюсь до последней строки в драйвере. cpp (главное удовольствие c)

спасибо в объявлении

https://gist.github.com/michaelkosoy/630ff729aaa0a00a56786f3d8b84158f

1 Ответ

1 голос
/ 12 апреля 2020

Итак, у вас есть ошибка в вашем конструкторе копирования. После выполнения конструктора копирования два числа будут делиться одним и тем же массивом цифр. Это означает, что при вызове деструкторов одна и та же память будет удалена дважды, что приведет к ошибке кучи.

Вы должны написать свой код, чтобы каждый Number получал свой собственный массив di git при любых обстоятельствах. .

Вам также не хватает оператора присваивания, что означает, что та же проблема произойдет, если вы назначите один номер другому.

Некоторое дальнейшее чтение на этом самом важный topi c.

Обратите внимание, что функция publi c setArr, которая позволяет любому установить массив di git для Number, в корне неверна, поскольку означает, что вы не можете знать, где массив определенного числа пришел, и поэтому вы не можете безопасно удалить этот массив. То же самое касается конструктора, который принимает массив di git в качестве параметра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...