I'm trying to find out where I made invalid writes to a piece of memory using Valgrind. It tells there is such an issue, also in what function, but not in what line. Although the function is quite small, I'd like to have the line-number shown in Valgrind. I've seen this on some outputs of Valgrind, but currently they are not shown, and I wonder why.
The output is the following:
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 shown after a double-colon behind the file-name. I.e. /home/niklas/Arbeitsfl?che/spyr/bin/Debug/spyr:23
or similar.
How can I 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;
}
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…