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

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

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

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

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

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

почему не delete (выделение памяти) - C++
почему в примерах в мсдне не высвобождается память после использования asctime, ctime? #include &lt;time.h&gt; #include &lt;stdio.h&gt; int...

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

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

delete[] - C++
Здравствуйте! Имеется след. код: char* values = new char; values = '\0'; ////ещё код//// delete values; Вопрос - почему...

new[] - delete[] - C++
Всем привет. Глупый вопрос, но тем не менее, он меня крайне заинтересовал. Вот например, есть такой код: void main() { int...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rififi
2338 / 1053 / 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
2338 / 1053 / 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
Эксперт С++
9456 / 5469 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
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?
Еще ссылки по теме:

delete[] - C++
подскажите пожалуйста как заставить это работать? Вылетает на строчке delete. Выделяю ведь память с помощью оператора new. А в идеале...

new и delete - C++
Ошибка, незнаю как для моего класса выделить память. Как исправить? class MyClass { int a, b, c; public: MyClass(int a,...

New/Delete - C++
нужно рассмотреть конкретную ситуацию: область, выделенная желтым цветом будет очищена, при использовании delete, область выделенная...

new и delete - C++
как лучше очищать память? #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; //как лучще очищать память? int main(){ char *buff...


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

Или воспользуйтесь поиском по форуму:
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?
Ответ Создать тему
Опции темы

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