![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#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: ![]() { 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; } |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 26.04.2010
Сообщений: 328
|
![]()
Да у вас течет !
Код:
Код:
А пачиму адреса разные подумайте, вывод настолько логичен, что я даже не знаю как его сформулировать. Подсказка : Код:
Последний раз редактировалось ozo; 09.07.2010 в 01:26. |
![]() |
![]() |
![]() |
#3 |
Регистрация: 11.06.2010
Сообщений: 5
|
![]()
Может я не правильно понял работу с выделением памяти?
Ведь если бы я просто объявил переменную (Mas A), при выходе из блока вызывается диструктор и до этой области памяти не достучаться. А когда я выделяю память динамически с помощью new, и в этой области памяти вся информация должна сохраняться и указатель на эту область должен передаться как результат функции через return. ![]() |
![]() |
![]() |
![]() |
#4 | |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#5 |
Регистрация: 11.06.2010
Сообщений: 5
|
![]()
Переделал прогу, все заработало, но теперь проблема с указателем (члены класса указатель на массив int *a и размер массива int size )- когда оператор сложения возвращает результат, то указатель на массив содержит мусор, хотя в блоке оператора сложения указатель имел корректное значение - в чем беда?
![]() Mas Mas: ![]() { 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 |