🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #1613

free() problemen opsporen (lang bericht)

#1613
From: 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"
Technical Details
Message-ID: <M4-dneY0gfSVv2jcRVnyig@scarlet.biz>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news2.google.com!news.maxwell.syr.edu!border1.nntp.dca.giganews.com!nntp.giganews.com!local1.nntp.dca.giganews.com!nntp.scarlet.biz!news.scarlet.biz.POSTED!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Thread: fcea4,4a0ea30ec4c86210,start
X-Google-Thread: 107324,4a0ea30ec4c86210,start
X-Google-Attributes: gidfcea4,gid107324,public
X-Google-Language: ENGLISH,ASCII-7-bit
Path: arc1-ca.pugleaf.net!g2news1.google.com!news2.google.com!news.maxwell.syr.edu!border1.nntp.dca.giganews.com!nntp.giganews.com!local1.nntp.dca.giganews.com!nntp.scarlet.biz!news.scarlet.biz.POSTED!not-for-mail
NNTP-Posting-Date: Mon, 24 Jan 2005 10:27:52 -0600
From: Aquila <braempje@netscape.net>
Subject: free() problemen opsporen (lang bericht)
Newsgroups: be.comp.programming,nl.comp.programmeren
Followup-To: be.comp.programming
Date: Mon, 24 Jan 2005 17:27:51 +0100
User-Agent: KNode/0.8.2
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7Bit
Message-ID: <M4-dneY0gfSVv2jcRVnyig@scarlet.biz>
Lines: 83
NNTP-Posting-Host: 81.11.173.231
X-Trace: sv3-k0SwiwK0UnGCTwGv0dH2KyoPsreNtZOtlWNqdImQkf7MfCp5iLHIPY6dyXQuJzCfsceHxd59Q50fSCQ!VSR+VOi9t+M6QvjFLzNiz/mG/ZR/dv6Eq88qGb2CnjKvNjrEIvgpgysPnIp1Mu2RE8fAXoFxF34=
X-Complaints-To: abuse@scarlet.be
X-DMCA-Complaints-To: abuse@scarlet.biz
X-Abuse-and-DMCA-Info: Please be sure to forward a copy of ALL headers
X-Abuse-and-DMCA-Info: Otherwise we will be unable to process your complaint properly
X-Postfilter: 1.3.22