1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
| TarasBer |
18.09.2009 15:35
Сообщение
#1
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Работу с типом char* я тупо не смог осилить, так как так и не понял, при каких операциях надо выделять ему память, при каких не надо. Короче ужаснейший тип, и кто его придумал, и ну его нафиг.
Решил применить string - я так понял, что это аналог паскалевского. Но обнаружилось, что после динамического создания структуры, содержащей поле типа string, и её удаления кол-во занимаемой памяти меняется. Встатив этот кусок в бесконечный цикл, я обнаружил, что память, пожираемая программой, пульсирует от 10 до 50 MЬ. Вторая проблема - при отладке на операциях с этим типом он лезет в свои модули, мне они неинтересны, как запретить отладчику в них влазить. Блин, настроек по сравнению с Дельфой раза в 3 больше, на кой. Сообщение отредактировано: TarasBer - 18.09.2009 15:41 -------------------- |
![]() ![]() |
| volvo |
18.09.2009 19:05
Сообщение
#2
|
|
Гость |
Цитата А лишние точки с запятой, не вызывающие ошибок компиляции - разве вредят? До поры до времени - не вредят... Пока ты не напишешь какую-нибудь конструкцию, в которой эта самая точка с запятой, скажем, образует пустой цикл, пустую ветку if/else или еще что-нибудь такое же трудноуловимое. Синтаксис С очень многое позволяет "намудрить", поэтому лучше избавляться от привычки ставить лишние символы, даже если они не вызывают ошибок компиляции.Цитата Интересно. Ну, тогда смотри: при выполнении delete, если добавить [], как я сделал, происходит вот что: сначала для каждого элемента массива вызывается его деструктор, и только потом освобождается память, выделенная под сам массив. Что происходит в случае замены string на int? А ничего страшного не произойдет, даже если не вызвать деструктор для int, от него все равно толку нет, утечки не будет даже без его вызова. В случае string все серьезнее: это полноправный класс, который имеет конструктор, выделяющий память. И экземпляр этого класса требуется удалить, иначе сам экземпляр остается висеть в памяти, а указатель на него потеряется.Поэтому всегда, когда выделяешь память динамически под массив, либо состоящий из не POD-типов (Plain Old Data, данные в стиле С), либо содержащий такие типы (как у тебя - структура, которая содержит non-POD type), то освобождай ее всегда с использованием delete [] p_arr;, чтобы быть уверенным в том, что для каждого элемента вызовется деструктор, и только потом удалится сам массив. |
TarasBer тип string, утечка памяти 18.09.2009 15:35
volvo Выделять память надо всегда. Просто когда-то ее мо... 18.09.2009 16:49
TarasBer
Выделять память надо всегда. Просто когда-то ее м... 18.09.2009 17:45
volvo Естественно... Для работы со строками в стиле С су... 18.09.2009 18:23
TarasBer
С чего бы? Ничего они не делают с памятью. В опис... 18.09.2009 18:43
TarasBer
Ну, тогда смотри: при выполнении delete, если до... 18.09.2009 20:05
volvo Угу, именно поэтому...
Кстати, а что за задачу ты... 18.09.2009 20:53
TarasBer
Кстати, а что за задачу ты решаешь?
Я решаю зад... 18.09.2009 21:07
volvo Фишка С++ - не в том, чтобы не писать свой велосип... 18.09.2009 21:29
TarasBer
Фишка С++ - не в том, чтобы не писать свой велоси... 18.09.2009 22:44
renesko1 С++ наоборот ИМХО понятен, если программа написана... 19.09.2009 14:29
TarasBer Хьюстон, у нас опять проблемы.
При вводе корректны... 19.09.2009 18:55
volvo Где память выделяется, и где она освобождается? Ес... 19.09.2009 19:34
TarasBer Естественно, все выделения и освобождения находятс... 19.09.2009 20:00
volvo Ну, хорошо... Это переопределение операции деления... 19.09.2009 21:03
TarasBer Значит собсна вычисление выражения выглядит так:
... 19.09.2009 21:23
volvo Сомневаюсь... Поскольку сведения у меня о твоей пр... 19.09.2009 23:02
TarasBer Запуск с гуардом даёт аксесс виолейшн, программа н... 20.09.2009 0:04
volvo Присоедини свой проект, я его прогоню в 2009... Мо... 20.09.2009 0:10
TarasBer Заодно я проверил, что дело не в "пустом... 20.09.2009 0:34
volvo А ты знаешь, у меня не вылетает. У тебя вечный цик... 20.09.2009 1:21
TarasBer > Так вот по 10 минут работало без перерыва, ни... 20.09.2009 12:10
TarasBer И надо сказать, что хавает от не спеша, где-то пол... 20.09.2009 14:07
volvo Ну не получается у меня, чтоб пожиралась память...... 20.09.2009 14:52
TarasBer А что это он сразу 8 метров отхватил? У меня в кор... 20.09.2009 15:07
volvo Это Дебаг-версия + CodeGuard... Если скомпилироват... 20.09.2009 15:15
TarasBer Я правильно понимаю, что команда new для создания ... 20.09.2009 18:20
TarasBer Мне удалось подключить CodeGuard.
Запустил, ввёл 1... 22.09.2009 22:17
TarasBer Решил упростить свой случай до предела.
Написал в ... 23.09.2009 13:12
volvo Ничего там не создается... Проверил и Билдером, и ... 23.09.2009 13:57
TarasBer Тогда ещё вопрос - как надо компилировать программ... 23.09.2009 14:16
volvo нехватка Vcl50.bpl 23.09.2009 14:20
TarasBer Понятно.
Альтернативный вариант - чистое API?
Екз... 23.09.2009 14:26
volvo И в этом случае возможны проблемы (при отсутствии ... 23.09.2009 14:44
TarasBer А просканировать как-нибудь тот екзешник, чтоб пон... 23.09.2009 20:31
volvo Реально, только сравнивать надо не EXE-шники, а MA... 23.09.2009 21:52
TarasBer А существует ли какой-либо механизм предсказания о... 24.09.2009 22:22
TarasBer Попытался заняться дальнейшим упрощением "нев... 27.09.2009 13:30
volvo Значит, в BCB6 такая "хорошая" работа с ... 27.09.2009 13:47
TarasBer
Значит, в BCB6 такая "хорошая" работа с... 27.09.2009 14:02
volvo Чего сложного?
http://www.codeblocks.org/downloads... 27.09.2009 14:09
volvo Нет, этот баг нашел не ты, его нашли другие... Ты ... 27.09.2009 14:40
TarasBer
catch (Exception &E) {
...
delete ... 28.09.2009 13:20
TarasBer А такой код, с удалением исключения, будет работат... 28.09.2009 15:47
volvo Нет, при попытке сделать
delete &E;получишь In... 28.09.2009 19:01
TarasBer Тогда какой #ифдеф на этот случай посоветуете? Я в... 28.09.2009 19:23
volvo Насколько я помню номера компиляторов - так:
cat... 28.09.2009 21:21
TarasBer > && (__BORLANDC__ >= 0x560)
Ну, во... 29.09.2009 9:35
volvo Ты спрашивал, как определить Билдер 6 директивами ... 29.09.2009 10:04
TarasBer Всё, больше вопросов нет, спасибо. 29.09.2009 13:45
TarasBer Как заставить встроенные функции модуля math не вы... 29.09.2009 15:29
TarasBer Заменил матх на фастматх, обнаружил новый прикол.
... 29.09.2009 20:28![]() ![]() |
|
Текстовая версия | 8.12.2025 17:30 |