ANTICHAT Forum
HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
НОВЫЕ ТОРГОВАЯ НОВОСТИ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 27.07.2009, 13:39
Glazz
Участник форума
Регистрация: 09.08.2008
Сообщений: 139
С нами: 9344432

Репутация: 15
По умолчанию

а тут еще случайно память не утекает? new вызываются да вызываются , а delete я так и не видел.
 
Ответить с цитированием

  #2  
Старый 27.07.2009, 13:47
horlyk
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
С нами: 9705420

Репутация: 21
По умолчанию

Блин, сложно что-ли показать как нужно сделать, вместо того, чтоб придераться к тому, что меня на данном этапе не интересует. Про операторы делет я знаю, в основной программе их применяю. Я же сразу сказал что это тестовая прога и интересует меня пока именно этот момент. А про то, что моск лопается от кода - папки могли бы решить эту проблему и написать правильный пример. Раздел же называется для новичков, потому я и выясняю то что мне не понятно было в книге. Вместо того говорят литературу читать лучше... ппц
 
Ответить с цитированием

  #3  
Старый 27.07.2009, 13:54
Fata1ex
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
С нами: 10216668

Репутация: 930


По умолчанию

horlyk, люди хотят помочь, не стоит обижаться. Прислушайся, все равно придется вернуться к азам.

Вот именно, раздел "для новичков", а не "лабораторные работы". Если тебе нужна готовая программа, пиши туда. Здесь советы по обучению и синтаксису.

Цитата:
папки могли бы решить эту проблему и написать правильный пример
Ага, все бы за тебя сделали, а ты бы так и остался на своем уровне. Тебе же предлагают учиться самому и развиваться. Ужас правда?

Последний раз редактировалось Fata1ex; 27.07.2009 в 13:56..
 
Ответить с цитированием

  #4  
Старый 27.07.2009, 14:03
horlyk
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
С нами: 9705420

Репутация: 21
По умолчанию

Ну во первых - это не лабораторная работа. Я сейчас джесса либерти читаю(освой с++ за 21 день) Дошел до списков. Там на том примере понять списки не реально. Потому начал искать информацию о списках в интернете и тут. Вроде как понял. Сейчас пишу программу с использованием списков - поиск в нем, добавление узла, удаление и т.д. И там у меня такая проблема появилась. Я хотел разбить все на методы, разбил, но при вызове метода, который должен был создавать узлы и заполнять их данными у меня появилась проблема - при возврате данные все теряются, хотя при отладке смотрел, что на в процессе создания все отлично, а при выходе из этого метода все теряется. Начал думать и решать эту проблему. Написал код, который уже окрестили кодом, от которого лопается моск. Он работает, памяти больше не занимает... Вот я и попросил помощи с тем вариантом, что у меня с самого начала не заработал.

Цитата:
Сообщение от Fata1ex  
Ага, все бы за тебя сделали, а ты бы так и остался на своем уровне. Тебе же предлагают учиться самому и развиваться. Ужас правда?
Я же придумал рабочий вариант, но его, как я написал выше, окрестили кодом, от которого лопается моск. лучшего придумать не смог и написал чтоб помогли.

Последний раз редактировалось horlyk; 27.07.2009 в 14:07..
 
Ответить с цитированием

  #5  
Старый 27.07.2009, 15:03
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
С нами: 10386906

Репутация: 599


По умолчанию

Цитата:
из мэйна я передаю указатель в метод, который принимает этот указатель и ему присваивается новый адрес оператором new. Далее изменяется значение data указателя. Дальше возврат в мэйн и вывод измененного значения на экран. Но значение остается прежним.
если ты хочешь изменить значение указателя, переданного параметром, то нада использовать ссылку на указатель. вообще такого кода лучше избегать в твоем примере, ибо это излишне усложнит код. примерно будет так.

Код:
#include <iostream>
using namespace std;

class node
{
public:
	node() { cout << "constructor...\n"; }
	~node() { cout << "destructor...\n"; }
	static void func(node* &Mynode);	
	node(node&) { cout << "copy-constructor...\n"; }
	int data;	
};
void main()
{
	node* Mynode = new node;
	Mynode->data = 5;

	node::func(Mynode);
	cout << Mynode->data << endl;
}
void node::func(node* &Mynode)
{
	delete Mynode;
	Mynode = new node;
	Mynode->data = 7;
}
метод func статический ибо иначе в твоем примере получится стремная конструкция delete this;
вообще простой совет - такие конструкции не используй никада, если уж совсем не припрет.
 
Ответить с цитированием

  #6  
Старый 27.07.2009, 15:15
horlyk
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
С нами: 9705420

Репутация: 21
По умолчанию

Ra$cal, спасибо, теперь понял. А лучший выход из такой ситуации какой?
 
Ответить с цитированием

  #7  
Старый 27.07.2009, 15:33
alex912
Новичок
Регистрация: 07.06.2009
Сообщений: 9
С нами: 8909499

Репутация: 5
По умолчанию

Все просто
При передаче указателя в функцию, создается копия данного указателя, который указывает в тоже самое место что и настоящий указатель. Поэтому Mynode->data = 5 срабатывает. Далее этот указатель указывает на новое место и Mynode->data = 7 уже относится к совершенно другому объекту. Как уже выше написали, если нужно изменить указатель - юзай ссылки.
 
Ответить с цитированием

  #8  
Старый 27.07.2009, 19:05
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
С нами: 10386906

Репутация: 599


По умолчанию

Цитата:
А лучший выход из такой ситуации какой?
я не понимаю, что именно делает твой метод. чисто логически не могу понять. если ты хочешь изменить поле data, то зачем тебе перевыделять память? ты должен или напрямую изменить data, или сделать его приватной переменной и добавить геттеры и сеттеры и юзать их.
 
Ответить с цитированием

  #9  
Старый 27.07.2009, 19:31
horlyk
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
С нами: 9705420

Репутация: 21
По умолчанию

Понятно, еще раз спасибо.
 
Ответить с цитированием

  #10  
Старый 28.07.2009, 23:57
SeNaP
Участник форума
Регистрация: 07.08.2008
Сообщений: 281
С нами: 9347610

Репутация: 165
По умолчанию

Проблема такая.
Как проверить на существоание дериктории, если она есть, то определить путь.
Помогите пожалуйсто
 
Ответить с цитированием
Ответ



Предыдущая тема Следующая тема
Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Часто задаваемые вопросы по MySQL Серый PHP 5 28.12.2006 18:26
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости. Обсуждения. 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Уязвимости CMS / форумов 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.