I am trying to figure out where I made invalid entries for a piece of memory using Valgrind. It says that there is such a problem, also in which function, but not in which line. Although the function is pretty small, I would like to have the line number shown in Valgrind. I saw this on some Valgrind outputs, but they are not shown at the moment, and I wonder why.
The conclusion is as follows:
niklas@emerald :~/Arbeitsfläche/spyr/bin/Debug$ valgrind --tool=memcheck --leak-check=full --show-reachable=yes ./spyr [...] ==4404== Invalid write of size 4 ==4404== at 0x8048849: sp_ParticleBuffer_init (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr) ==4404== by 0x8048BFC: sp_ParticleSystem_createParticle (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr) ==4404== by 0x8048691: main (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr) ==4404== Address 0x422a0a0 is 4 bytes after a block of size 4 alloc'd ==4404== at 0x402BE68: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so) ==4404== by 0x8048BC1: sp_ParticleSystem_createParticle (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr) ==4404== by 0x8048691: main (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr) ==4404== ==4404== Invalid write of size 4 ==4404== at 0x8048865: sp_ParticleBuffer_init (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr) ==4404== by 0x8048BFC: sp_ParticleSystem_createParticle (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr) ==4404== by 0x8048691: main (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr) ==4404== Address 0x422a09c is 0 bytes after a block of size 4 alloc'd ==4404== at 0x402BE68: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so) ==4404== by 0x8048BC1: sp_ParticleSystem_createParticle (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr) ==4404== by 0x8048691: main (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr) [...]
I saw outputs where the line number is displayed after the double colon after the file name. That is /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr:23 or the like.
How to enable this?
FYI, this is the sp_ParticleBuffer_init function.
int sp_ParticleBuffer_init(sp_ParticleBuffer* buffer, sp_Uint32 buffer_size, int init_zero) { size_t size = sizeof(sp_Particle) * buffer_size; buffer->next = null; buffer->array = (sp_Particle*) malloc(size); buffer->alive_count = 0; if (!buffer->array) return SPYR_ALLOCFAILED; if (init_zero) memset((void*) buffer->array, 0, size); return SPYR_NOERR; }
source share