Thread View: be.comp.programming
1 messages
1 total messages
Started by Aquila
Mon, 24 Jan 2005 16:27
free() problemen opsporen (lang bericht)
Author: Aquila
Date: Mon, 24 Jan 2005 16:27
Date: Mon, 24 Jan 2005 16:27
83 lines
4825 bytes
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