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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
breate
56 / 56 / 2
Регистрация: 23.10.2009
Сообщений: 250
#1

почему сыпится delete? - C++

26.10.2009, 18:02. Просмотров 516. Ответов 7
Метки нет (Все метки)

кто подсткажет почему сыпится delete и delete [] тоже
C++
1
2
3
4
5
6
7
class addres{
private:
char *street;
int home[3];
public:
addres();
~addres();
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
istream & operator >>(istream &is,addres &ad)
{
int i=1;
char a[20];
is>>a;
for(;a[i]!=NULL;i++);
if(ad.street!=NULL) 
delete ad.street;
ad.street = new char[i];
for(int j=0;j<=i;j++)
        ad.street[j]=a[j];
is>>ad.home[0];
is>>ad.home[1];
is>>ad.home[2];
return is;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rififi
2336 / 1051 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
26.10.2009, 18:10     почему сыпится delete? #2
кто подсткажет почему сыпится delete и delete [] тоже
попытка освобождения неинициализированного указателя
breate
56 / 56 / 2
Регистрация: 23.10.2009
Сообщений: 250
26.10.2009, 18:15  [ТС]     почему сыпится delete? #3
Цитата Сообщение от Rififi Посмотреть сообщение
попытка освобождения неинициализированного указателя
не понял?
C++
1
2
if(ad.street!=NULL) 
delete ad.street;
на момент входа когда сыпется объект ad имеет все заполненные поля, по мойму он инициализирован или я чего то недоперепонимаю?
Rififi
2336 / 1051 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
26.10.2009, 18:16     почему сыпится delete? #4
на момент входа ...
... у тебя в ad.street мусор
blackswan
12 / 12 / 0
Регистрация: 08.07.2009
Сообщений: 61
26.10.2009, 18:18     почему сыпится delete? #5
breate,
if(ad.street!=NULL) - это не означает, что объекту наверняка выделена память, даже если не NULL, указатель может принимать произвольное значение.
breate
56 / 56 / 2
Регистрация: 23.10.2009
Сообщений: 250
26.10.2009, 18:48  [ТС]     почему сыпится delete? #6
ааа вот конструктор по умолчанию
C++
1
2
3
4
addres::addres(){
street=NULL;
home[1]=home[2]=home[0]=0;
}
на момент входа в ad.street находится строка заканчивающаяся нулём хотя сейчас ноль проверю

в хедере ещё ;
C++
1
#define NULL 0
Добавлено через 6 минут
всё нашел ошибку
я не дощитывался одного элемента
C++
1
2
for(;a[i]!=NULL;i++);
if(ad.street!=NULL)
у меня нуль проваливался

Добавлено через 12 минут
почему 0 проваливается?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
istream & operator >>(istream &is,addres &ad)
{
int i=1;
char a[20];
is>>a;
for(;a[i-1]!=NULL;i++);
if(ad.street!=NULL) 
delete [] ad.street;
ad.street = new char[i+1];
for(int j=0;j<=i;j++)
        ad.street[j]=a[j];
is>>ad.home[0];
is>>ad.home[1];
is>>ad.home[2];
return is;
}
этот код работает единственное отличие это
C++
1
ad.street = new char[i+1];
недоперепонял?
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
26.10.2009, 18:50     почему сыпится delete? #7
char a[20] - это массив символов типа char, а нумерация элементов массива с 0 начинается (у Вас int i = 1)...
Кстати, раз уж на с++ пишите, в чём глубинный смысл использования строк в стиле с? Чем Вам std::string не угодил?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2009, 18:55     почему сыпится delete?
Еще ссылки по теме:

New/Delete C++
New delete C++
C++ Почему вылетает программа на delete []
C++ Почему при выполнении оператора delete возникает ошибка "program.exe has triggered a breakpoint"?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
breate
56 / 56 / 2
Регистрация: 23.10.2009
Сообщений: 250
26.10.2009, 18:55  [ТС]     почему сыпится delete? #8
гы, по а я начинаю бегать с [i-1] до a[i-1]!=NULL следовательно i уже включат строку a и NULL а во втором цикле я намеренно его копирую (j=0; j<=i;j++)
Yandex
Объявления
26.10.2009, 18:55     почему сыпится delete?
Ответ Создать тему
Опции темы

Текущее время: 13:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru