C/C++ :: Mudflap And / Or Valgrind Explanation?
Jun 25, 2013what is the uses of the
-mudflap
and
-valgrind
tags when compiling a program in gcc?
what is the uses of the
-mudflap
and
-valgrind
tags when compiling a program in gcc?
I have a large hash table, where each index has a container that has a doubly linked list. Things work up until releasing the memory. Each record is created with malloc, and each record->data is also created with malloc and the associated string is copied in using strcpy(). The table itself is released in another part of the program and doesn't produce and error.
/**
* valgrind --track-origins=yes
*/
==16898== Conditional jump or move depends on uninitialised value(s)
==16898== at 0x8049685: shFree (SpellHash.c:110)
==16898== by 0x8049352: unload (dictionary.c:115)
==16898== by 0x8048E64: main (speller.c:158)
==16898== Uninitialised value was created by a heap allocation
[Code] .....
How to interpret valgrind. Error resolved on a small problem. Now running into issues on large (>10000 words to check) problems. It appears the virtual machine just can't keep up for some reason. Running the code on my local computer produces no errors, memory usage is minuscule, and profile tools don't report any issues.
I have airport class which should navigate planes, in its list to runways, with method move, theres a method prepare which changes the direction of flight to all planes, always before move is called, move just increments decrement x and y of plane in its list. But after calling two times in row airport->move(), I get screwed and I really dont know wheres the problem. Have I badly initiazed something? Iterator gets invalidated.
Valgrind Stacktrace
Conditional jump or move depends on uninitialised value(s)
==26207== at 0x409601: plane::move() (in /home/xnovak11/Downloads/airport/main)
==26207== by 0x401FBD: airport::move() (in /home/xnovak11/Downloads/airport/main)
==26207== by 0x405FE1: io::start(std::istream&, std:stream&, std:stream&) (in /home/xnovak11/Downloads/airport/main)
This is how I add planes into list in airport
Code:
list<plane*> planes;
list<plane*>::const_iterator planeIterator;
list<plane*>::iterator planeIteratorMoj;
bool airport::addPlane(const plane& p) {
[Code] .....
This is the method where it fails. When I call it once, no problem, after second call I get instead of normal number in cout<<after move<< s1 i get like 8795456 ....
Code:
void airport::move() {
for(planeIteratorMoj = planes.begin(); planeIteratorMoj!= planes.end(); planeIteratorMoj++) {
plane * p1 = (*planeIteratorMoj);
int s,w;
p1->getPosition(s,w);
[Code] .....
I discovered valgrind and started using it for my c code. But I get following error message at almost every malloc position, :
==19505== 40 errors in context 10 of 12: ==19505== Use of uninitialised value of size 8 ==19505== at 0x10000416E: my_method (main.c:662) ==19505== by 0x10000159E: main (main.c:182) ==19505== Uninitialised value was created by a heap allocation ==19505== at 0x47F1: malloc (vg_replace_malloc.c:302) ==19505== by 0x100001C21: my_method (main.c:333) ==19505== by 0x10000159E: main (main.c:182)
and I really don't understand what it means. I already googled it but I didn't find out what is my mistake.SO here i just put one example:
Code:
int main(int argc, char** argv) {
//i declare my variables at this position
Uint *used, *forbidden_jumps, *forbidden_jumpsV,
*forbidden_jump;
/*now i want to allocate one of them, this is my line 333 from the error message*/
//a_num is set during the execution of the program,
ALLOC(used, Uint, a_num);
}
[code].....
Is there any support page for the output of valgrind? I found it on the homepage.
==39800== Invalid free() / delete / delete[] / realloc()
==39800== at 0x4D9D: free (vg_replace_malloc.c:477)
==39800== by 0x10000C471: Tokenizer::~Tokenizer() (in ./a.out)
==39800== by 0x10000C424: Tokenizer::~Tokenizer() (in ./a.out)
==39800== by 0x100001B8B: main (in ./a.out)
==39800== Address 0x10002a778 is 8 bytes inside a block of size 7,208 alloc'd
[Code] ....