Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
breate
56 / 56 / 6
Регистрация: 23.10.2009
Сообщений: 250
1

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

26.10.2009, 18:02. Просмотров 556. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2009, 18:02
Ответы с готовыми решениями:

Почему вылетает программа на delete []
Здравствуйте, подскажите, пожалуйста, что именно не так и как исправить....

почему не delete (выделение памяти)
почему в примерах в мсдне не высвобождается память после использования asctime,...

Почему delete не устанавливает автоматически указатель в NULL?
Почему delete не устанавливает автоматически указатель в NULL?

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

Динамический массив структур. Почему данные доступны после выполнения операции delete []
Всем привет! Выполнил вот такое задание. После того как вывелись данные трех...

7
Rififi
2363 / 1056 / 104
Регистрация: 03.05.2009
Сообщений: 2,656
26.10.2009, 18:10 2
кто подсткажет почему сыпится delete и delete [] тоже
попытка освобождения неинициализированного указателя
0
breate
56 / 56 / 6
Регистрация: 23.10.2009
Сообщений: 250
26.10.2009, 18:15  [ТС] 3
Цитата Сообщение от Rififi Посмотреть сообщение
попытка освобождения неинициализированного указателя
не понял?
C++
1
2
if(ad.street!=NULL) 
delete ad.street;
на момент входа когда сыпется объект ad имеет все заполненные поля, по мойму он инициализирован или я чего то недоперепонимаю?
0
Rififi
2363 / 1056 / 104
Регистрация: 03.05.2009
Сообщений: 2,656
26.10.2009, 18:16 4
на момент входа ...
... у тебя в ad.street мусор
0
blackswan
13 / 13 / 0
Регистрация: 08.07.2009
Сообщений: 61
26.10.2009, 18:18 5
breate,
if(ad.street!=NULL) - это не означает, что объекту наверняка выделена память, даже если не NULL, указатель может принимать произвольное значение.
0
breate
56 / 56 / 6
Регистрация: 23.10.2009
Сообщений: 250
26.10.2009, 18:48  [ТС] 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];
недоперепонял?
0
easybudda
Модератор
Эксперт CЭксперт С++
10114 / 6020 / 1510
Регистрация: 25.07.2009
Сообщений: 11,409
26.10.2009, 18:50 7
char a[20] - это массив символов типа char, а нумерация элементов массива с 0 начинается (у Вас int i = 1)...
Кстати, раз уж на с++ пишите, в чём глубинный смысл использования строк в стиле с? Чем Вам std::string не угодил?
0
breate
56 / 56 / 6
Регистрация: 23.10.2009
Сообщений: 250
26.10.2009, 18:55  [ТС] 8
гы, по а я начинаю бегать с [i-1] до a[i-1]!=NULL следовательно i уже включат строку a и NULL а во втором цикле я намеренно его копирую (j=0; j<=i;j++)
0
26.10.2009, 18:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2009, 18:55

Используя delete по указателю, возвращенному new [] или delete [] указателем, возвращаемым new
Помогите ответить на вопрос, не могу понять суть вопроса (правильно ли понимаю,...

В чем разница между delete и delete[]?
а можете еще по подробней рассказать про delete, точнее даже delete, чем...

Почему при выполнении оператора delete возникает ошибка "program.exe has triggered a breakpoint"?
class test { public: void a() { std::cout &lt;&lt; &quot;test::a&quot; &lt;&lt; std::endl; }...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru