Memory map после завершения программы (откуда? О_о)

Модератор: Модераторы разделов

Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12

Memory map после завершения программы

Сообщение Assuri »

Скажите, пожалуйста, что я могу такого написать в программе C++, чтобы после завершения программы у меня выдавалось:

Код: Выделить всё

======= Memory map: ========
08048000-0804e000 r-xp 00000000 03:01 18170119   /home/doom/c++/diary/diary
0804e000-0804f000 rw-p 00005000 03:01 18170119   /home/doom/c++/diary/diary


Такие операторы, как new я не использовал. Работаю только с файлами и записью объектов в эти файлы.

Стоит заменить, что именно после завершения программы. => что-то с деструкторами. Но свои деструкторы я не определял.

Код довольно большой, поэтому находить точную ошибку я вас просить не буду. Просто подскажите, из-за чего такая проблема возможна?
Спасибо сказали:
Аватара пользователя
minoru-kun
Сообщения: 621
ОС: Debian GNU/Linux

Re: Memory map после завершения программы

Сообщение minoru-kun »

А чего тут непонятного? С указателями где-то намудрил, не иначе как. Посмотрев ошибки в остальных твоих постах, можно сделать вывод, что тебе не мешало бы выкурить какую-нибудь книжку по Assembler. Серьезно >_<
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12

Re: Memory map после завершения программы

Сообщение Assuri »

minoru-kun писал(а):
23.07.2007 12:37
А чего тут непонятного? С указателями где-то намудрил, не иначе как. Посмотрев ошибки в остальных твоих постах, можно сделать вывод, что тебе не мешало бы выкурить какую-нибудь книжку по Assembler. Серьезно >_<

В моей программе нет ни единого указателя!
Спасибо сказали:
Аватара пользователя
minoru-kun
Сообщения: 621
ОС: Debian GNU/Linux

Re: Memory map после завершения программы

Сообщение minoru-kun »

Хм... Тогда, чтобы не было таких жестоких ошибок, выложи сюда исходники. :)
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12

Re: Memory map после завершения программы

Сообщение Assuri »

minoru-kun писал(а):
23.07.2007 12:43
Хм... Тогда, чтобы не было таких жестоких ошибок, выложи сюда исходники. :)

Вот архивчик:


Только программка недописана. Поэтому критика только по теме !
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:
Аватара пользователя
DaemonTux
Сообщения: 1480
Статус: Юный падаван
ОС: Gentoo

Re: Memory map после завершения программы

Сообщение DaemonTux »

-DooM- писал(а):
23.07.2007 12:52
minoru-kun писал(а):
23.07.2007 12:43
Хм... Тогда, чтобы не было таких жестоких ошибок, выложи сюда исходники. :)

Вот архивчик:


Только программка недописана. Поэтому критика только по теме !

1. Не нашел деструкторы класса.
2. Нужно после открытия файла и обработки закрывать файл.

Код: Выделить всё

PFile.Close();
Vladivostok Linux User Group
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12

Re: Memory map после завершения программы

Сообщение Assuri »

Кстати, данная вещь возникает после 2-ого выхода, а не 1-ого из программы.
1. Не нашел деструкторы класса.

А что в теле деструктора надо написать то?
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12

Re: Memory map после завершения программы

Сообщение Assuri »

Все, я понял. Это все из-за класса "string", который я использовал, думая, что он удобнее, чем char*. Изменил некоторые фрагменты кода и теперь такой ошибки нет.

Больше никогда не буду пользоваться этим классом. Лучше сам напишу перегруженные методы, чтобы удобнее было.
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Memory map после завершения программы

Сообщение Uncle_Theodore »

Класс string значительно удобнее, чем char
А для исследования памяти, поставь, наконец, себе хороший дебаггер. valgrind -- очень рекомендую.
Спасибо сказали:
Аватара пользователя
Александр
Сообщения: 945
Статус: Пользователь Debian
ОС: Debian 'Etch'

Re: Memory map после завершения программы

Сообщение Александр »

2. Нужно после открытия файла и обработки закрывать файл.

Зачем? Функция exit(), вызываемая явно или неявно сама закрывает все открытые файлы.
HP 530 Core2Duo T2400 950GMA 1GB RAM 120 HDD
KDE 3.5.7 kernel 2.6.25 X.org 7.4
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12

Re: Memory map после завершения программы

Сообщение Assuri »

Uncle_Theodore писал(а):
23.07.2007 18:55
Класс string значительно удобнее, чем char
А для исследования памяти, поставь, наконец, себе хороший дебаггер. valgrind -- очень рекомендую.

Я тоже так думал, но с char* подобных проблем у меня нет. Кстати, как valgrind'ом пользоваться? И, может быть, Вы подскажите, где у меня ошибка?
Спасибо сказали:
Аватара пользователя
helicopter
Сообщения: 324
Статус: Комсомолец
ОС: Gentoo Linux

Re: Memory map после завершения программы

Сообщение helicopter »

Uncle_Theodore писал(а):
23.07.2007 18:55
Класс string значительно удобнее, чем char
А для исследования памяти, поставь, наконец, себе хороший дебаггер. valgrind -- очень рекомендую.


Но при этом, как-бы потормознее ))
Выбирая Linux, вы развиваете цивилизацию. Выбирая windows, вы набиваете кошелёк забугорному буржую...
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Memory map после завершения программы

Сообщение Uncle_Theodore »

helicopter писал(а):
23.07.2007 21:28
Uncle_Theodore писал(а):
23.07.2007 18:55
Класс string значительно удобнее, чем char
А для исследования памяти, поставь, наконец, себе хороший дебаггер. valgrind -- очень рекомендую.


Но при этом, как-бы потормознее ))

C++ вообще тормознее C.
А valgrind'ом пользоваться так
Компилируешь прогу с ключом -g, а потом запускаешь через valgrind.
Подробности -- в мане.
Для валгринда есть еще и гуя, Валькирия называется... :) Посмотри на сайте.
http://valgrind.org/
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Memory map после завершения программы

Сообщение Liksys »

Александр писал(а):
23.07.2007 19:20
2. Нужно после открытия файла и обработки закрывать файл.

Зачем? Функция exit(), вызываемая явно или неявно сама закрывает все открытые файлы.

Угу, начитались всяких крисовкасперских :) Нельзя оставлять раскрытыми ресурсы,
Все надо всегда возвращать системе после окончания использования - память, закрывать файлы...
Спасибо сказали:
Аватара пользователя
Александр
Сообщения: 945
Статус: Пользователь Debian
ОС: Debian 'Etch'

Re: Memory map после завершения программы

Сообщение Александр »

Угу, начитались всяких крисовкасперских

Не, им не увлекаюсь :)
Память, конечно, надо отдавать, но от лишнего свободного PID системе особо легче не станет... Тут, в принципе, на любителя - если файл больше не понадобится, можно и закрыть, иначе можно и оставить. mmap, конечно, другая басня уже.
HP 530 Core2Duo T2400 950GMA 1GB RAM 120 HDD
KDE 3.5.7 kernel 2.6.25 X.org 7.4
Спасибо сказали:
Аватара пользователя
DaemonTux
Сообщения: 1480
Статус: Юный падаван
ОС: Gentoo

Re: Memory map после завершения программы

Сообщение DaemonTux »

Александр писал(а):
23.07.2007 23:17
Память, конечно, надо отдавать, но от лишнего свободного PID системе особо легче не станет... Тут, в принципе, на любителя - если файл больше не понадобится, можно и закрыть, иначе можно и оставить. mmap, конечно, другая басня уже.

Вот по этому и развелось кривых программ потомучто делается на любителя. Дело не в легче или тяжелее.
Надо делать как положенно.
Файл можно оставлять открытым во время работы программы. А по её завершению надо закрывать их.

Темболее что реализация проги идет через классы. И закрытие файла можно вставить в диструктор. Собственно для закрытия (портов, файлов и тд). и освобождения памяти деструкторы и нужны.
Vladivostok Linux User Group
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Memory map после завершения программы

Сообщение v04bvs »

Александр писал(а):
23.07.2007 19:20
2. Нужно после открытия файла и обработки закрывать файл.

Зачем? Функция exit(), вызываемая явно или неявно сама закрывает все открытые файлы.

Если не закрывать файл, то могут остаться несброшенные буферы, которые останутся незаписанными при выходе через, например, abort.
Спасибо сказали:
Аватара пользователя
Александр
Сообщения: 945
Статус: Пользователь Debian
ОС: Debian 'Etch'

Re: Memory map после завершения программы

Сообщение Александр »

Файл можно оставлять открытым во время работы программы. А по её завершению надо закрывать их.

Вы меня немного не поняли :)
Говоря оставлять, я имел ввиду "оставить до конца работы программы", где файлы закроются автоматически.
Если не закрывать файл, то могут остаться несброшенные буферы, которые останутся незаписанными при выходе через, например, abort.

Ну, это уже на совести как раз программиста. Либо он должен открывать файл с sync, либо же соответствующим образом обрабатывать поступающие сигналы.
HP 530 Core2Duo T2400 950GMA 1GB RAM 120 HDD
KDE 3.5.7 kernel 2.6.25 X.org 7.4
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12

Re: Memory map после завершения программы

Сообщение Assuri »

Написать несколько строк - не сложно, поэтому решил закрыть на всякий случай.

С этой проблемой покончено, теперь появилась другая. Вот в этой теме
Спасибо сказали: