Gnus
написал 5 июля 2005 года в 00:24 (952 просмотра)
Ведет себя
неопределенно; открыл 16 тем в форуме, оставил 26 комментариев на сайте.
Имеется динамический массив строк. Когда требуется его очистить, я так понимаю, пишется такое:
for(i=0;i
В результате происходит нарушение сегментации, хотя просто free(str), (где i-любое число меньше kol_elem), без цикла, подобного не вызывает.
Долго чесал репу — в чём тут замес?
Последние комментарии
- OlegL, 17 декабря 2023 года в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
Да удалять надо так. Ошибка в другом месте… Скорее всего указатели в str получены не из malloc. Это ломает кучу, и в самый неожиданный момент приводит к SIGSEGV.
Я такого рода ошибки, в последнее время, ловлю при помощи:
Оч-чень рекомендую — ленивая тулза (в смысле — для ленивых). Не панацея, но помогает.
А где есть по нем учебник? А то некоторые вещи, в частности:
Syscall param chdir(path) points to unaddressable byte(s)
at 0×1BA1577D: chdir (in /lib/i686/libc-2.2.5.so)
by 0×1BA8214D: XtCallCallbacks (in /usr/X11R6/lib/libXt.so.6.0
и
Address 0×1BC2244A is 0 bytes after a block of size 2 alloc’d
at 0×1B8FF29B: malloc (vg_replace_malloc.c:130)
by 0×8048BFD: Add (in /home/vasia/Documents/a.out)
в документации почему-то не описаны.
А зачем тебе учебник? Словарь в руки и переводи что он тебе пишет.
по русски это звучит так:
параметр системного вызова chdir (path) указывает на неадресованные байты. Какие строки ты передавал в libXt.so?
адрес 0×1bc2244a — 0 байт после блока размером 2 выделен. — Это видать нарушение кучи какое-то случилось.
А, вообще, компилируй (и линкуй тоже) с флагом -g3 (или можно -ggdb3). Тогда ещё понятнее станет:
вместо `by 0×8048bfd: Add (in /home/vasia/Documents/a.out)' будет писать
`by 0×8048bfd: Add (in /home/vasia/Documents/my_buggy_source.c:123)'
C этой прогой идет достаточно подробная документация, следует ее почитать
Из libXt я запрашивал.XawListShowCurrent() возвратила структуру XawListReturnStruct соответственно,строку из которой я и передал в chdir().
А вообще меня смутило выражение unaddressable. Как это понимать по отношению к параметру, который мне возвратили?
Кривой адрес у строки. Я с Xaw не возился, не знаю, что там может быть не так. Но что-то не так, а-адназначна. То ли нету этого Current, то ли ещё что-то. Логика то простая. Раз проблемы с указателем — значит надо искать откуда значение у этого указателя и почему это значение кривое.
кстати, а дебуггером слабо посмотреть, что это за строчка которую вернул XawListShowCurrent? Скорее всего дебуггер тебе скажет, что-нить типа address … is inaccessible
Да со строкой-то всё в порядке, во всяком случае на консоль она выводится нормально. Интересно другое: если chdir() пердать строку, содержащую имена некоторых директорий, прога вываливается, хотя остальные глотает без проблем.
То есть chdir(«/home/vasia») — нарушение сегментации, а просто «/home» — работает. И от длины строки это не зависит.
Даже не знаю… Надо смотреть программу. Либо вот ещё что. Компилируй с флагом -Wall. может чего нового узнаешь.
А ты попробуй chdir(«/home/vasia/»)..?