| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > Проблемы с malloc && free |
| Автор: niccom 20.4.2007, 14:36 | ||
| Cуть проблемы вот в чем В main создаю три потока в одном из них вызываю функцию(ниже по тексту) Эта функция получает указатель на структуру которая содежит указатель на место в памяти и длину Мне нужно сформировать экран из 40 строк и вывести в stdout. Столкнулся с проблемой создаю строку- буфер маллоком в цикле в конце каждой итерации делаю free() и на этом прогу выбрасывает с сообщением: SIGABRT 0xffffe410 in __kernel_vsyscall() Дальше комментирую free() все работает пока памяти хватает ,ессно. Если эту ф-ию реализовать как отдельную прогу все то же работает. Грешу на pthread Может кто сталкивался?
|
| Автор: MAKCim 20.4.2007, 18:50 |
как показывает практика грешить на библиотеку надо в самую последнюю очередь во-первых, что есть addstr()? во-вторых (все зависит от того, что есть addstr()) ptrs после первой итерации не валиден поскольку мы вызываем free(test), а ptrs = test |
| Автор: niccom 21.4.2007, 06:28 | ||
addstr() ф-ия из ncurses принимает указатель на строку Конечно же я перепробовал варианты с установкой ptrs=NULL; free(test); test=NULL; следующая итерация Результат тот же. Теперь по кол-ву памяти которым владеет вся прога не считая статически выделенной при компиляции - копейки динамически выделено до вызова этой ф-ии около 4 килобайт. В конце своих опытов я сделал такой трюк - уменьшил кол -во итераций до 2-х а free(test); вызвал не из цикла а перед выходом из ф-ии результат тот же. Где дальше рыть не знаю Проще без thread-ов переписать - уверен будет работать. |
| Автор: MAKCim 21.4.2007, 09:22 |
| все зависит от того, используется ли ptrs после вызова addstr() (в смысле используется ли библиотекой), если используется, то ошибка закономерна это ничего не даст совет, пробегись отладчиком по коду и точно локализуй ошибку |
| Автор: Goganchic 23.4.2007, 10:23 |
если проще переписать без потоков - то лучше так и сделать, т.к. потоки существенно усложняют процесс написания программы а также дебаг. |
| Автор: niccom 23.4.2007, 15:20 | ||
Ну насчет усложняют написания программы я бы поспорил. Другое дело что программирование с потоками нужно организовывать очень тщательно . Видимо какой то момент я упустил. Мне кажется нужно попробовать выделять память на границе страницы. В любом случае у меня появился спортивный интерес добить эту прогу. Иначе применение thread- ов и не освоить если на первом трабле все бросить. А насчет отладки на 100 % согласен с потоками на порядок сложнее. |