Есть не очень сложная многопоточная программа. Работает под Win и Linux. Под Win все проверено/перепроверено. Никаких утечек и т.д. и т.п. Работает как часы. Под Linux'ом - сваливается. Причем в gdb не могу причину установить ;-)
---Type <return> to continue, or q <return> to quit---Program received signal SIGSEGV, Segmentation fault.0x0 in ?? ()(gdb) bt#0 0x0 in ?? ()#1 0x804dd82 in txList::_at_ (this=0xbffffd20, i=0) at txlist.cxx:52#2 0x80495c8 in main (argc=2, argv=0xbffffd64) at ../layer1/inc/txlist.h:115(gdb)
Вот код:
const txListNode* txList::_at_ (int i) const
{
if (i >= entries()) /* !!! Строка 52 */
{
return 0;
}
register txListNode* node = _head_._next;
while (i--)
{
node = node->_next;
}
return node;
}
int entries (void) const
{
return _entries_;
}
Похоже, что стек разрушается, т.к.:
(gdb) disass $eip $eip+20
Dump of assembler code from 0x0 to 0x14:
0x0: Cannot access memory at address 0x0.
(gdb)
Но как найти _ГДЕ_ ?