![]() |
|
Модераторы: xvr |
![]()
|
|
| niccom |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.2.2007 Репутация: нет Всего: нет |
Cуть проблемы вот в чем
В main создаю три потока в одном из них вызываю функцию(ниже по тексту) Эта функция получает указатель на структуру которая содежит указатель на место в памяти и длину Мне нужно сформировать экран из 40 строк и вывести в stdout. Столкнулся с проблемой создаю строку- буфер маллоком в цикле в конце каждой итерации делаю free() и на этом прогу выбрасывает с сообщением: SIGABRT 0xffffe410 in __kernel_vsyscall() Дальше комментирую free() все работает пока памяти хватает ,ессно. Если эту ф-ию реализовать как отдельную прогу все то же работает. Грешу на pthread Может кто сталкивался?
|
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
как показывает практика грешить на библиотеку надо в самую последнюю очередь во-первых, что есть addstr()? во-вторых (все зависит от того, что есть addstr()) ptrs после первой итерации не валиден поскольку мы вызываем free(test), а ptrs = test -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| niccom |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.2.2007 Репутация: нет Всего: нет |
addstr() ф-ия из ncurses принимает указатель на строку Конечно же я перепробовал варианты с установкой ptrs=NULL; free(test); test=NULL; следующая итерация Результат тот же. Теперь по кол-ву памяти которым владеет вся прога не считая статически выделенной при компиляции - копейки динамически выделено до вызова этой ф-ии около 4 килобайт. В конце своих опытов я сделал такой трюк - уменьшил кол -во итераций до 2-х а free(test); вызвал не из цикла а перед выходом из ф-ии результат тот же. Где дальше рыть не знаю Проще без thread-ов переписать - уверен будет работать. |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
все зависит от того, используется ли ptrs после вызова addstr() (в смысле используется ли библиотекой), если используется, то ошибка закономерна
это ничего не даст совет, пробегись отладчиком по коду и точно локализуй ошибку -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Goganchic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 678 Регистрация: 18.6.2004 Репутация: нет Всего: 5 |
если проще переписать без потоков - то лучше так и сделать, т.к. потоки существенно усложняют процесс написания программы а также дебаг. |
|||
|
||||
| niccom |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.2.2007 Репутация: нет Всего: нет |
Ну насчет усложняют написания программы я бы поспорил. Другое дело что программирование с потоками нужно организовывать очень тщательно . Видимо какой то момент я упустил. Мне кажется нужно попробовать выделять память на границе страницы. В любом случае у меня появился спортивный интерес добить эту прогу. Иначе применение thread- ов и не освоить если на первом трабле все бросить. А насчет отладки на 100 % согласен с потоками на порядок сложнее. |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
ничего подобного (во всяком случае я бы так категорично не заявлял) что проще по-твоему написать: сервер многопоточный (многопроцессный) или с использованием конечного автомата? Добавлено через 44 секунды niccom, здается мне, что многопоточность тут не причем -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |