decvar
написал 15 декабря 2005 года в 14:33 (1017 просмотров)
Ведет себя
как мужчина; открыл 111 тему в форуме, оставил 1838 комментариев на сайте.
#ifndef _WIN32 void * DoThread(void * ptr) { CProvider * provider = (CProvider*)ptr; std::cout << ">now casting provider ptr to class instanse..."; if(provider != NULL) { std::cout << "[done]" << std::endl; provider->threadImpl(); } else std::cout << "[error]" << std::endl; } //Linux version thread void CProvider::StartThread() { int r = pthread_create(&m_thread, &m_attrs, DoThread, reinterpret_cast(this)); if(r!=0) std::cout << ">can't start new pthread, code " << r << std::endl; } #endif
метод CProvider::threadImpl() тоже просто метод этого класса…
При попытке вызова StartThread(); вылетает segfault на моменте provider->threadImpl() внутри DoThread()
Что-то я не пойму чего ему для счастя надо?
Последние комментарии
- OlegL, 17 декабря в 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
Экология и вегетарианство на благо всем живым существам Планеты.
А если вместо threadImpl поставить ф-ю CProvider::TestFunc(int a) { std::cout << a << std::endl; } то как себя будет вести программа? Это позволит определить, проблема ли в threadImpl или же где-то в другом месте.
проблема не с threadImpl(), так как там сразу же стоит std::cout
а выпадает оно так:
decvar@dhcp0-253:~/codding/client> ./client
>there is more than one interface.
>self ip : 192.168.0.253
>now casting provider ptr to class instanse…[done]
Segmentation fault
decvar@dhcp0-253:~/codding/client>
Хм, интересная трабла :) Вечером прийду — разберусь. Если найдешь причину — отпишись тут, ок?
Попробуй дебаггером. Valgrind должен сказать немного больше, чем «segfault».
Good Luck,
UT
а этот *this внутре StartThread… ты под него память откуда берёшь — из стека или из кучи?
И вообще, давай колись на завершённую программу. я по своему разумению дописал, у меня это работает. причём как из стека, так и из кучи. valgrind чтой-то ругается, но я думаю что это проблемы glibc.
вот это работает:
все ~450 исходников? Да тут и NDA не даст :)
На самом деле я просто старый пожиратель кореньев, так как ключевая строка :
Всем спасибо за участиет….