🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: be.comp.programming
1 messages
1 total messages Started by Aquila Mon, 24 Jan 2005 16:27
free() problemen opsporen (lang bericht)
#1613
Author: Aquila
Date: Mon, 24 Jan 2005 16:27
83 lines
4825 bytes
Ik zit in een simulator te werken (nsclick) maar ik krijg foutmeldingen in
deze aard:
free(): invalid pointer 0x87382a8!
Ik heb dus valgrind gestart, en addrcheck geeft hetvolgende resultaat na het
afbreken van de uitvoering:

==24538== ERROR SUMMARY: 22 errors from 2 contexts (suppressed: 0 from 0)
==24538== 
==24538== 11 errors in context 1 of 2:
==24538== Invalid read of size 4
==24538==    at 0x823D551: Click::HashMap<Click::IPAddress,
Click::WaitingPackets>::find_pair(Click::IPAddress const&) const
(ipaddress.hh:189)
==24538==    by 0x823C9FD:
Click::AODVWaitingForDiscovery::runTask(Click::IPAddress const&,
Click::AODVWaitingForDiscovery::TimerData*)
(aodv_waitingfordiscovery.cc:82)
==24538==    by 0x823CC21:
Click::AODVWaitingForDiscovery::handleTask(Click::Timer*, void*)
(aodv_waitingfordiscovery.cc:115)
==24538==    by 0x82101C2: Click::Master::run_timers() (master.cc:380)
==24538==  Address 0x3450F474 is 4 bytes inside a block of size 8 free'd
==24538==    at 0x34149A52: operator delete(void*) (vg_replace_malloc.c:156)
==24538==    by 0x823C936:
Click::AODVWaitingForDiscovery::runTask(Click::IPAddress const&,
Click::AODVWaitingForDiscovery::TimerData*)
(aodv_waitingfordiscovery.cc:69)
==24538==    by 0x823CC21:
Click::AODVWaitingForDiscovery::handleTask(Click::Timer*, void*)
(aodv_waitingfordiscovery.cc:115)
==24538==    by 0x82101C2: Click::Master::run_timers() (master.cc:380)
==24538== 
==24538== 11 errors in context 2 of 2:
==24538== Invalid read of size 4
==24538==    at 0x823D5B3: Click::HashMap<Click::IPAddress,
Click::WaitingPackets>::remove(Click::IPAddress const&) (ipaddress.hh:189)
==24538==    by 0x823C9EE:
Click::AODVWaitingForDiscovery::runTask(Click::IPAddress const&,
Click::AODVWaitingForDiscovery::TimerData*)
(aodv_waitingfordiscovery.cc:81)
==24538==    by 0x823CC21:
Click::AODVWaitingForDiscovery::handleTask(Click::Timer*, void*)
(aodv_waitingfordiscovery.cc:115)
==24538==    by 0x82101C2: Click::Master::run_timers() (master.cc:380)
==24538==  Address 0x3450F474 is 4 bytes inside a block of size 8 free'd
==24538==    at 0x34149A52: operator delete(void*) (vg_replace_malloc.c:156)
==24538==    by 0x823C936:
Click::AODVWaitingForDiscovery::runTask(Click::IPAddress const&,
Click::AODVWaitingForDiscovery::TimerData*)
(aodv_waitingfordiscovery.cc:69)
==24538==    by 0x823CC21:
Click::AODVWaitingForDiscovery::handleTask(Click::Timer*, void*)
(aodv_waitingfordiscovery.cc:115)
==24538==    by 0x82101C2: Click::Master::run_timers() (master.cc:380)
==24538== IN SUMMARY: 22 errors from 2 contexts (suppressed: 0 from 0)


Aan de eerste fout kan ik spijtig genoeg niet veel doen wegens te weinig
tijd, maar dit is Click::AODVWaitingForDiscovery::runTask:
void AODVWaitingForDiscovery::runTask(const IPAddress & destination,
TimerData* data){
 Buffer::Pair* pair = buffer.find_pair(destination);
 assert(pair); 
 assert(!pair->value.timer->scheduled());
 
 ++pair->value.nrOfRetries;
 if (pair->value.maxTTL){
  if(pair->value.nrOfRetries == AODV_RREQ_RETRIES){
   delete(pair->value.timer);
   delete data; // <-- lijn 69
   
Die TimerData zelf is deze struct:
struct TimerData{
   AODVWaitingForDiscovery* waitingForDiscovery;
   IPAddress destination;
  };
Een ingewikkelde situatie ik besef het: dit zijn data voor de static
callbackfunctie die wordt opgeroepen als de timer afloopt.
Waarom is dit nu fout voor valgrind?

Alle hulp is meer dan welkom...
-- 
"May the source be with you"
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads