информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Где водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
очень вряд ли 19.01.04 01:24  Число просмотров: 1226
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
Чтобы при нынешних объемах памяти ее утечка могла привести к ошибкам переполнения - это практически нереально (опять же, с этим можно бороться, проверяя результат операции выделения памяти). Разве что определено какое-то совсем смешное значение размера стека, но симптомы были бы совсем другие, да и в данном случае, как я понимаю, все равно память выделяется в куче, а не на стеке.
<programming>
[C++] Переполнение буфера!!! 18.01.04 20:14  
Автор: CrazyPitbull Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Работая в Билдере 6.0, программа велетает из-за переполнения буфера, но немогу понять где утечка, есть ли какая тулся для этого дела???
В программе активно пользуется AnsiString может ли из-за него сьедаться память? А вылетает программа на выполнении функции IntToStr()!
[C++] Мысли недоспециалиста о шаманстве 21.01.04 00:57  
Автор: void <Grebnev Valery> Статус: Elderman
<"чистая" ссылка>
> Работая в Билдере 6.0, программа велетает из-за
> функции IntToStr()!

Прошу прощения, что вмешиваюсь.
Не зная проект в подробностях трудно сказать наверняка, конечно. Но...
Было замечено в некоторых случаях, что когда, например,
Вы пытаетесь записать в мембер String str некоторого класса, "расположенного" в dll, то возникает аналогичная ситуация.
Здесь не имеется ввиду известная ситуация с передечей String str в качестве прараметра в функцию в dll. Передаваться может и LPCSTR.

В этих случаях я (особо не разбираясь в чём дело) в конструкторе тех классов инициализировал String str = "". Это делалось переде первым осмысленным обращением к мембер переменной String str.

Попробуйте инициализировать String str = "" где-то в начале программы. А только затем выполнять IntToStr. Может и поможет.

ПС. Могу ошибаться в той части, где именно это было - или в BC++ с классом String, или в VC++ с классом CString.
Я тоже в билдере весьма часто пишу. Никаких глюков со... 19.01.04 02:08  
Автор: Killer{R} <Dmitry> Статус: Elderman
Отредактировано 19.01.04 02:15  Количество правок: 1
<"чистая" ссылка>
Я тоже в билдере весьма часто пишу. Никаких глюков со строками не видел. Код бы глянуть.. Если он не слишком большой. Что касается IntToStr. Я замечал что .ToInt() под 98й виндой не любит большие числа - переполнения буфера не происходит а просто преобразование вылетает типа это неправильный интежер. Потому я обычно юзаю atoi, да и с ним результирующий код кстати получается меньше. Может и у тебя чтото подобное... Попробуй itoa, правда он немного неудобен.
Кода много, даже очень, поэтому невыложить! а с IntToStr(),... 19.01.04 02:22  
Автор: CrazyPitbull Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Кода много, даже очень, поэтому невыложить! а с IntToStr(), то вылетает, то нет...
Вообще всё это дело пашет в отдельном потоке, и несмотря, на то, что все действия по работе с интерфейсом и компонентами я синхронизирую, глюки вылетают при обращении к нему(время от времени)...Кстате, при обращении к компаненту, уоторого невидно(типо TTimer) нужно синхронизироваться или нет?
так бы и сказал что много... и с потоками.. 19.01.04 02:30  
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка>
> Кода много, даже очень, поэтому невыложить! а с IntToStr(),
> то вылетает, то нет...
> Вообще всё это дело пашет в отдельном потоке,
Что ты для создания потока юзаешь?
>и несмотря,
> на то, что все действия по работе с интерфейсом и
> компонентами я синхронизирую,
Как именно?
>глюки вылетают при обращении
> к нему(время от времени)...Кстате, при обращении к
> компаненту, уоторого невидно(типо TTimer) нужно
> синхронизироваться или нет?
Вообще надо независимо видимый компонент или нет. Но если ты тока со своего потока к нему обращаешься то конкретно в случае с TTimer наверно необязательно. Потому как там тока SetTimer\KillTimer юзается при работе с ним.
для создания потока, отнаследую свой класс от TThread, поток... 19.01.04 02:46  
Автор: CrazyPitbull Статус: Незарегистрированный пользователь
<"чистая" ссылка>
для создания потока, отнаследую свой класс от TThread, поток запускается, в нём создаёться цикл, который крутиться всё время, пока я его не прибью... Одна итерация успешна, далее ошибки... Синхронизирую при помощи Synhronize()...
Есть идеи?
Есть. 19.01.04 02:56  
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка>
> Есть идеи?
Есть.
Project->Options->CodeGuard Validation поможет найти обращения к левым адресам, срывы стека и прочую фигню. Очень полезно юзать его для отлова неочевидных багов, каким твой имхо и является.
В ANSI C нет itoa 19.01.04 02:19  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> чтото подобное... Попробуй itoa, правда он немного
> неудобен.
Не знаю как с этим в билдере. Но в качестве перевода из int в string я всегда использовал sprintf
Отсталый человек :) 19.01.04 14:52  
Автор: Ktirf <Æ Rusakov> Статус: Elderman
<"чистая" ссылка>
> > чтото подобное... Попробуй itoa, правда он немного
> > неудобен.
> Не знаю как с этим в билдере. Но в качестве перевода из int
> в string я всегда использовал sprintf
stringstream::operator<< не модно, нет? :)
По существу могу сказать только то, что в проекте, в котором я сейчас занят, itoa переписано с сигнатурой примерно такой: string itoa(int); с перегрузками для других числовых типов. И не надо мне про производительность :) И вообще говоря, ничто не мешает написать template <typename T> anytoa(const T &);
А я на Plain C пишу - там stringstream-а нет :-) 19.01.04 16:07  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Круть :) Вот уж не думал :) Беру свой наезд обратно :) 19.01.04 16:31  
Автор: Ktirf <Æ Rusakov> Статус: Elderman
<"чистая" ссылка>
зато в билдере есть (stdlib.h) Ж) 19.01.04 02:27  
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка>
> Не знаю как с этим в билдере. Но в качестве перевода из int
> в string я всегда использовал sprintf
Ну енто по вкусу. Зато имхо atoi пошустрее будет потому как ему не надо разбирать исходные параметры. Если конечно не нужны всяки примочки типа добивания числа ноликами.
[C++] Утечка или переполнение? 18.01.04 20:43  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> В программе активно пользуется AnsiString может ли из-за
> него сьедаться память? А вылетает программа на выполнении
> функции IntToStr()!
AnsiString в билдере сам заботится о памяти под строку или ему надо буфер? Если надо выделять, то возможно, как уже сказано, не выделен буфер. Лучший способ борьбы с переполнениями - понять что переполняется и проверять границы выделенной памяти.

Для нахождения утечек лучше пользоваться специальными отладочными версиями malloc/free или new/delete. Можно также пользоваться чем нибудь типа BoundsChecker-а, или специальными отладочными библиотеками (ищи в гугле по запросам типа memory leak debugging, memory leak detection) - существуют бесплатные версии.
[C++] Прошу прощения если я спутал терминологию! 19.01.04 00:46  
Автор: CrazyPitbull Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Дело в том, что программа вылетает в дизасемблер на команде push, как я могу представить это из-за того, что места больше нету, т.е. буфер переполнен, а происходит это в следствии того, что гдето я забыл поставить delete, в этом месте память и утекает :), вот и встал вопрос о программе кс помощью которой я смог бы отследить время жизьни той или иной переменной(это как максимум) или как минимум отслеживать действия с памятью!
Спасибо, что откликнулись!
[C++] Команда push не только ложит на стек значение 19.01.04 02:15  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Дело в том, что программа вылетает в дизасемблер на команде
> push, как я могу представить это из-за того, что места
До того, как положить, она еще и вычисляет его. Например команда

push [0]

---

совершенно однозначно приведет к Access Violation. На C эквивалентом будет попытка выложить на стек разыменованный указатель, который равен NULL:


---
char *ptr = NULL;
printf("%x", *ptr);

---

Уж лучше приведи участок кода - попробуем разобраться (хотя я борланд и не сильно люблю)
С кодом сложно, его слишком много, могу сказать, что там... 19.01.04 02:43  
Автор: CrazyPitbull Статус: Незарегистрированный пользователь
<"чистая" ссылка>
С кодом сложно, его слишком много, могу сказать, что там пользуется динамическая память, и причём очень часто!!! Вроде я везде прибиваю её!
Вот ещё ошибка вылетает обращения в стандартную длелелину билдера, говорит, что не в тот адрес лезу!
Хотелось бы все таки услышать какое исключение генерируется? 19.01.04 16:12  
Автор: Cyril <sc> Статус: Member
<"чистая" ссылка>
> С кодом сложно, его слишком много, могу сказать, что там
> пользуется динамическая память, и причём очень часто!!!
На свете слишком много программ где используется динамическая память, причем весьма часто ;-)
Весь код приводить и не требуется, попробуй выбросить все лишнее что не относиться к месту ошибки, совсем не обязательно приводить все детали реализации или там действительно все так тесно завязано?
> Вроде я везде прибиваю её!
> Вот ещё ошибка вылетает обращения в стандартную длелелину
> билдера, говорит, что не в тот адрес лезу!
Если можно, то попробуй реализовать то, что выполняется в потоке как отдельную функцию и запустить ее в главном потоке, это гораздо проще отладить, чем в многопоточном приложении.
очень вряд ли 19.01.04 01:24  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
Чтобы при нынешних объемах памяти ее утечка могла привести к ошибкам переполнения - это практически нереально (опять же, с этим можно бороться, проверяя результат операции выделения памяти). Разве что определено какое-то совсем смешное значение размера стека, но симптомы были бы совсем другие, да и в данном случае, как я понимаю, все равно память выделяется в куче, а не на стеке.
переполнение и утечка - две большие разницы 18.01.04 20:23  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
Раз вылетает, значит надо проверить буфер, в который она записывает результат. Скорее всего, под результирующую строку просто не выделена память.
Да нет тут немного другое... 19.01.04 00:49  
Автор: CrazyPitbull Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Есть цикл в котором выполняются операции, один раз всё нормально, а на следующем программа вылетает... Я всё обнуляю и удаляю в конце цикла, но...!!!
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach