![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
TarasBer |
![]()
Сообщение
#1
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Работу с типом char* я тупо не смог осилить, так как так и не понял, при каких операциях надо выделять ему память, при каких не надо. Короче ужаснейший тип, и кто его придумал, и ну его нафиг.
Решил применить string - я так понял, что это аналог паскалевского. Но обнаружилось, что после динамического создания структуры, содержащей поле типа string, и её удаления кол-во занимаемой памяти меняется. Встатив этот кусок в бесконечный цикл, я обнаружил, что память, пожираемая программой, пульсирует от 10 до 50 MЬ. Вторая проблема - при отладке на операциях с этим типом он лезет в свои модули, мне они неинтересны, как запретить отладчику в них влазить. Блин, настроек по сравнению с Дельфой раза в 3 больше, на кой. Сообщение отредактировано: TarasBer - 18.09.2009 15:41 -------------------- |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата так и не понял, при каких операциях надо выделять ему память, при каких не надо. Выделять память надо всегда. Просто когда-то ее можно выделить самим фактом инициализации строки:char *s = "my string";, а иногда это приходится делать через new, то есть выделять память динамически. Цитата после динамического создания структуры, содержащей поле типа string, и её удаления кол-во занимаемой памяти меняется. Можно посмотреть на структуру, и на то, как выделяется память? Что говорят средства отладки (скажем, тот же CodeGuard)?Добавлено через 1 мин. Цитата Вторая проблема - при отладке на операциях с этим типом он лезет в свои модули, мне они неинтересны, как запретить отладчику в них влазить. Не делать "Step Into", а пользоваться вместо этого "Step Over", тогда отладчик будет выполнять всю строку, а не по отдельным операциям. |
TarasBer |
![]()
Сообщение
#3
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Выделять память надо всегда. Просто когда-то ее можно выделить самим фактом инициализации строки: char *s = "my string";, а иногда это приходится делать через new, то есть выделять память динамически. Но просто s = "my string" уже не катит. Что делают с памятью strcpy и strcat - тоже непонятно. Цитата Можно посмотреть на структуру, и на то, как выделяется память? Что говорят средства отладки (скажем, тот же CodeGuard)? Ну например: Код struct S { string Name; }; ... S *s; while(1){ s = new S[8]; delete s; }; Прикол в том, что если заменить string на int, то утечка полностью исчезает. В кодгуарде пока не разобрался. Цитата Добавлено через 1 мин. Не делать "Step Into", а пользоваться вместо этого "Step Over", тогда отладчик будет выполнять всю строку, а не по отдельным операциям. А если строка передаётся как параметр в функцию? Тогда степ овер пропусткает то, что делает функция, а это как раз не надо. А степ инто тут же залезает в дебри всякие. Сообщение отредактировано: TarasBer - 18.09.2009 17:51 -------------------- |
![]() ![]() |
![]() |
Текстовая версия | 21.06.2025 0:15 |