|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.07.2010, 00:50 | #1 |
Регистрация: 11.06.2010
Сообщений: 5
|
Адрес переменной
Не могу понять: почему если я в методе (перегруженный оператор сложения) создал объект и возвращаю его, то в блоке описания метода у объекта адрес один, а когда метод возвращает этот объект уже в блоке main - этот объект уже имеет другой адрес? Может кто подскажет?
void Fill(int *&a) { delete []a; int size=0; cout<<"Введи размер массива"<<endl; cin>>size; a=new int[size]; for(int i=0;i<size;i++) cin>>a[i]; } void main() { int *a=NULL; Fill(a); Mas A(a,5), Z(A); int b[3]={9,2,7}; Mas B(b,3); Z=A+B; } Вот реализация самого метода Mas Mas:perator +(Mas A) const { Mas *REZ=new Mas(*this); for(int i=0;i<A.size;i++) { if(!(*REZ).Contains(A.a[i])) (*REZ).Add(A.a[i]); } return *REZ; } |
09.07.2010, 01:20 | #2 |
Форумчанин
Регистрация: 26.04.2010
Сообщений: 328
|
Да у вас течет !
Код:
Код:
А пачиму адреса разные подумайте, вывод настолько логичен, что я даже не знаю как его сформулировать. Подсказка : Код:
Последний раз редактировалось ozo; 09.07.2010 в 01:26. |
09.07.2010, 12:15 | #3 |
Регистрация: 11.06.2010
Сообщений: 5
|
Может я не правильно понял работу с выделением памяти?
Ведь если бы я просто объявил переменную (Mas A), при выходе из блока вызывается диструктор и до этой области памяти не достучаться. А когда я выделяю память динамически с помощью new, и в этой области памяти вся информация должна сохраняться и указатель на эту область должен передаться как результат функции через return. |
09.07.2010, 12:49 | #4 | |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,520
|
Цитата:
|
|
11.07.2010, 22:16 | #5 |
Регистрация: 11.06.2010
Сообщений: 5
|
Переделал прогу, все заработало, но теперь проблема с указателем (члены класса указатель на массив int *a и размер массива int size )- когда оператор сложения возвращает результат, то указатель на массив содержит мусор, хотя в блоке оператора сложения указатель имел корректное значение - в чем беда?
Mas Mas:perator +(Mas A) const { Mas REZ(*this); /**/ return REZ; } Mas::Mas(const Mas&M) { size=M.size; a=new int[size]; for(int i=0;i<size;i++) a[i]=M.a[i]; } |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Адрес переменной: Вопрос | Black-Sparkle | Общие вопросы C/C++ | 11 | 11.08.2009 14:59 |
Снова про адрес переменной | Pedro | Общие вопросы Delphi | 2 | 17.12.2008 21:53 |
Адрес переменной | Pedro | Общие вопросы Delphi | 11 | 16.12.2008 13:03 |
Работа с файлами (создание, удаление, открытие, связываение с переменной, очищение памяти переменной) | Arkuz | Общие вопросы Delphi | 12 | 25.09.2007 20:47 |
как узнать ip адрес зная mac адрес | Roman | Работа с сетью в Delphi | 9 | 25.06.2007 12:39 |