c0d3r

Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору 4aineG Цитата: конкретно ошибка возникла когда я добавил operator - | Ну так смотрите код и ищите ошибку. Добавляйте отладочный вывод, анализируйте -- словом учитесь отлаживать программу, для начала без отладчика. Код: Line operator - (char letter) { char *temp = new char[length]; int i,j; for (i=0, j=0; i<length; i++) if (Line1[ i ] != letter) { temp[ j ] = Line1[ i ]; j++; } length = strlen(temp)+1; temp[length-1] = '\0'; strcpy(Line1, temp); return Line1; } | Посмотрите внимательно на код. Вот что вижу я: - есть new, но нигде нет delete, значит утекает память - переменная j ничем не отличается от i и абсолютно не нужна - в самом начале temp у вас содержит мусор. Потом вы копируете в него символы, пропуская letter. Далее вызывается strlen(), которая вычисляет размен строки, которая должна завершаться нулём. У вас оня не завершается... - уже после strlen() вы пытаетесь добавлять этот завершающий ноль, но основываетесь вы на размере строки, который был посчитан выше и притом неверно. Но, похоже, всё это не то из-за чего падает программа. Проблема, очень уж похоже, что здесь: Код: ln1 - 'u' создаёт временный объект со строкой. В Line1 у него хранится указатель на выделенную память. При присвоении этот указатель тупо копируется, потому что у вас не определён оператор присваивания и поэтому используется стандартный. Через некоторое время вызыввется деструктор ln1 и освобождает память, затем вызывается деструктор ln2 и пытается освободить ровно ту же память, которая уже была освобождена и падает. (Попробуйте закомментировать вызов delete в деструкторе и программа перестанет падать.) Вывод. Вам нужно написать оператор присваивания. P.S. Я точно не уверен оператор присваивания ва нужен или оператор копирования или оба, лучше сами проверьте. | Всего записей: 132 | Зарегистр. 24-08-2004 | Отправлено: 21:17 12-08-2008 | Исправлено: c0d3r, 21:22 12-08-2008 |
|