ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

27.07.2009, 13:39
|
|
Участник форума
Регистрация: 09.08.2008
Сообщений: 139
Провел на форуме: 560332
Репутация:
15
|
|
а тут еще случайно память не утекает? new вызываются да вызываются , а delete я так и не видел.
|
|
|

27.07.2009, 13:47
|
|
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
Провел на форуме: 233095
Репутация:
21
|
|
Блин, сложно что-ли показать как нужно сделать, вместо того, чтоб придераться к тому, что меня на данном этапе не интересует. Про операторы делет я знаю, в основной программе их применяю. Я же сразу сказал что это тестовая прога и интересует меня пока именно этот момент. А про то, что моск лопается от кода - папки могли бы решить эту проблему и написать правильный пример. Раздел же называется для новичков, потому я и выясняю то что мне не понятно было в книге. Вместо того говорят литературу читать лучше... ппц 
|
|
|

27.07.2009, 13:54
|
|
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме: 4205500
Репутация:
930
|
|
horlyk, люди хотят помочь, не стоит обижаться. Прислушайся, все равно придется вернуться к азам.
Вот именно, раздел "для новичков", а не "лабораторные работы". Если тебе нужна готовая программа, пиши туда. Здесь советы по обучению и синтаксису.
папки могли бы решить эту проблему и написать правильный пример
Ага, все бы за тебя сделали, а ты бы так и остался на своем уровне. Тебе же предлагают учиться самому и развиваться. Ужас правда?
Последний раз редактировалось Fata1ex; 27.07.2009 в 13:56..
|
|
|

27.07.2009, 14:03
|
|
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
Провел на форуме: 233095
Репутация:
21
|
|
Ну во первых - это не лабораторная работа. Я сейчас джесса либерти читаю(освой с++ за 21 день) Дошел до списков. Там на том примере понять списки не реально. Потому начал искать информацию о списках в интернете и тут. Вроде как понял. Сейчас пишу программу с использованием списков - поиск в нем, добавление узла, удаление и т.д. И там у меня такая проблема появилась. Я хотел разбить все на методы, разбил, но при вызове метода, который должен был создавать узлы и заполнять их данными у меня появилась проблема - при возврате данные все теряются, хотя при отладке смотрел, что на в процессе создания все отлично, а при выходе из этого метода все теряется. Начал думать и решать эту проблему. Написал код, который уже окрестили кодом, от которого лопается моск. Он работает, памяти больше не занимает... Вот я и попросил помощи с тем вариантом, что у меня с самого начала не заработал.
Сообщение от Fata1ex
Ага, все бы за тебя сделали, а ты бы так и остался на своем уровне. Тебе же предлагают учиться самому и развиваться. Ужас правда?
Я же придумал рабочий вариант, но его, как я написал выше, окрестили кодом, от которого лопается моск. лучшего придумать не смог и написал чтоб помогли.
Последний раз редактировалось horlyk; 27.07.2009 в 14:07..
|
|
|

27.07.2009, 15:03
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
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;
вообще простой совет - такие конструкции не используй никада, если уж совсем не припрет.
|
|
|

27.07.2009, 15:15
|
|
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
Провел на форуме: 233095
Репутация:
21
|
|
Ra$cal, спасибо, теперь понял. А лучший выход из такой ситуации какой?
|
|
|

27.07.2009, 15:33
|
|
Новичок
Регистрация: 07.06.2009
Сообщений: 9
Провел на форуме: 28710
Репутация:
5
|
|
Все просто 
При передаче указателя в функцию, создается копия данного указателя, который указывает в тоже самое место что и настоящий указатель. Поэтому Mynode->data = 5 срабатывает. Далее этот указатель указывает на новое место и Mynode->data = 7 уже относится к совершенно другому объекту. Как уже выше написали, если нужно изменить указатель - юзай ссылки.
|
|
|

27.07.2009, 19:05
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
А лучший выход из такой ситуации какой?
я не понимаю, что именно делает твой метод. чисто логически не могу понять. если ты хочешь изменить поле data, то зачем тебе перевыделять память? ты должен или напрямую изменить data, или сделать его приватной переменной и добавить геттеры и сеттеры и юзать их.
|
|
|

27.07.2009, 19:31
|
|
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
Провел на форуме: 233095
Репутация:
21
|
|
Понятно, еще раз спасибо.
|
|
|

28.07.2009, 23:57
|
|
Участник форума
Регистрация: 07.08.2008
Сообщений: 281
Провел на форуме: 3300342
Репутация:
165
|
|
Проблема такая.
Как проверить на существоание дериктории, если она есть, то определить путь.
Помогите пожалуйсто 
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|