It's in util.c ParseString. I'm guessing the problem is incompatibility between the type "unsigned int" and the type of str.npos, which is size_type. Try changing the two "unsigned int"s to "size_type". old: void ParseString(const string& str, char c, vector& v) { unsigned int i1 = 0; unsigned int i2; do { i2 = str.find(c, i1); v.push_back(str.substr(i1, i2-i1)); i1 = i2+1; } while (i2 != str.npos); } new: void ParseString(const string& str, char c, vector& v) { size_type i1 = 0; size_type i2; do { i2 = str.find(c, i1); v.push_back(str.substr(i1, i2-i1)); i1 = i2+1; } while (i2 != str.npos); } mmalmi@cc.hut.fi wrote: > Here's another test run debug.log I got when debugging with gdb. The > program started eating memory after the debug line "irc 8" and within a > few seconds crashed with "terminate called after throwing an instance of > 'std::bad_alloc'". > >> It's in RecvUntil, but I still can't see anything wrong with it. The >> only thing I can think of is if the socket is receiving a spew of >> characters. >> >> Try this irc.cpp. debug.log may grow rapidly so be ready to kill it. >> >> mmalmi@cc.hut.fi wrote: >>> debug.log attached >>> >>>> That narrows it down a lot. It didn't print any IRC activity in >>>> debug.log, so I guess it couldn't have gotten past the RecvUntil. >>>> Eyeballing it I don't see anything obvious. I guess it would have to >>>> be either in ConnectSocket or RecvUntil. >>>> >>>> Try it with the attached irc.cpp and net.cpp and send me the debug.log. >>>> >>>> Or you could run it in gdb and step through ThreadIRCSeed >>>> gdb --args bitcoin [switches] >>>> b ThreadIRCSeed >>>> run >>>> step >>>> or u to step over and up out of routines. >>>> >>>> mmalmi@cc.hut.fi wrote: >>>>> I get the error regardless of the getinfo. Commenting out >>>>> ThreadIRCSeed fixed the problem. >>>>> >>>>>> Does it still do it if you didn't do getinfo? >>>>>> >>>>>> You could comment out the CreateThreads listed below, then re-enable >>>>>> them one at a time until it does it again. Then we would know which >>>>>> thread the problem is in. >>>>>> >>>>>> net.cpp, under // Start threads >>>>>> CreateThread(ThreadIRCSeed, NULL) >>>>>> CreateThread(ThreadSocketHandler, NULL, true) >>>>>> CreateThread(ThreadOpenConnections, NULL) >>>>>> CreateThread(ThreadMessageHandler, NULL) >>>>>> >>>>>> init.cpp: >>>>>> CreateThread(ThreadRPCServer, NULL); >>>>>> >>>>>> mmalmi@cc.hut.fi wrote: >>>>>>> Here goes. I forgot to mention the crash error message: >>>>>>> >>>>>>> terminate called after throwing an instance of 'std::bad_alloc' >>>>>>> what(): std::bad_alloc >>>>>>> >>>>>>>> Could you send me the debug.log? >>>>>>>> >>>>>>>> mmalmi@cc.hut.fi wrote: >>>>>>>>> I tried debugging my build of bitcoind with ddd debugger, but >>>>>>>>> didn't have much success yet. It always ends up taking all >>>>>>>>> the system's memory and finally crashes. Could you please >>>>>>>>> send me again the latest 64 bit build of bitcoind, so I can >>>>>>>>> see if the problem is about my build? >>>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>> >>>>> >>>>> >>> >>> >>> > > >