Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Проблема с классом и массивом char-ов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вылетает ошибка при запуске программы http://www.cyberforum.ru/cpp-beginners/thread15958.html
Написал несложную программу сложения матриц. Скомпилирывал все нормально, ошибок нема. Начинаюца проблемы когда жму "Выполнить" програма запускаеца, нече не успевает сделать как вылетает ошибка,...
C++ Функции времени Подскажите можно ли, и каким способом вернуть из библиотечных функций чисто int значения min sec и hour чтоб присвоить их потом тем же переменным в своем созданом классе и если мона то каким способом. http://www.cyberforum.ru/cpp-beginners/thread15936.html
Классы-друзья (использование данных одного класса из другого) C++
Зарание спс ))) Я лаймер в С++ но учусь чтоб исправиться. И куда как не к вам обращаться за помощью =) в тяжкие дни свои. Проблема с классами, везде написано что для того чтоб мона было юзать ...
Сортировка вставками C++
Помогите плиз немогу написать программу, незнаю с чего начать и что писать, может у кого что нить завалялось для этой темы, заранее спс Короче, надо разработать программу для реализации алгоритма...
C++ Заменить любую группу пробелов одним http://www.cyberforum.ru/cpp-beginners/thread15929.html
помогите пожалуйста с лабой. необходимо сжать строку , заменив любую группу пробелов одним пробелом.Исходную строку и результат вывести на экран. Подпрограмму обработки строки следует оформить в...
C++ Как научиться программировать на языке С++; Аллен Р., Глассборо Ф. У кого нибудь есть "Как научиться программировать на языке С++; Аллен Р., Глассборо Ф." в электронном формате? подробнее

Показать сообщение отдельно
master.EXE
88 / 16 / 2
Регистрация: 10.03.2008
Сообщений: 101
14.11.2008, 19:41
Цитата Сообщение от CheshireCat Посмотреть сообщение
1. Разумеется, если delete[] не закомментированы, будет вылетать с ошибкой сразу же. Чему у тебя равно arr, когда выполняется вход в тело конструктора, ась? Правильно, мусор там лежит.....
2. Почему вылетает при заполнении массива - ставь точку останова и вперед в отладчик! Чему у тебя равны в этот момент a и arr? Причин может быть много, код довольно таки стремный....
Возможно я чего-то не понимаю, но какая разница между тем от чего очищать выделенную память? Есть ли разница от того, лежит ли там мусор или ценные данные? Для машины (если она конечно не высокоинтеллектуальна) никакой разницы. Хотя, в то же время стандарты С++ оговаривают, что нужно использовать операцию delete только с теми переменными, которые были выделены операцией new. Так что, вполне возможно, что дело не в мусоре, который хранится изначально, а в чем-то другом...

Добавлено через 2 минуты 10 секунд
master.EXE
А как правильно он должен выглядеть?
Опять же, смущают вылеты при наличии delete[] в деструкторе.
1) Я думаю, что так:
C++
1
2
3
4
5
CMyString::CMyString(void)
{
    delete[] arr;//удаляется заданный в .h указатель.
    arr= new char[16];//нет параметра  - размер 16
}
2) Смотри, у тебя в разделе private насписано следующее:
C++
1
2
int size;
char* arr; //указатель на массив создается
Т.е. ты создаешь указатель arr, который указывает на тип char. Насколько я помню, стандарт языка С++ гласит, что пользоваться командой delete для указателя можно только тогда, когда память пож этот указатель была преждевременно выделена командой new. В противном случае, ситуация может быть любой.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru