Tracking down: bad memory request

Hi all.

I have made a program which seemed to “work” in emulation mode.
However when I compile for device mode - I get the wrong results.

I have tried using valgrind to see if I had any bad mem requests. Valgrind reported this:

==9648== Invalid read of size 8
==9648== at 0x4015EE4: (within /lib/ld-2.7.so)
==9648== by 0x400AB93: (within /lib/ld-2.7.so)
==9648== by 0x40061E4: (within /lib/ld-2.7.so)
==9648== by 0x4008677: (within /lib/ld-2.7.so)
==9648== by 0x4012048: (within /lib/ld-2.7.so)
==9648== by 0x400DDF5: (within /lib/ld-2.7.so)
==9648== by 0x401191A: (within /lib/ld-2.7.so)
==9648== by 0x5B60F8A: (within /lib/libdl-2.7.so)
==9648== by 0x400DDF5: (within /lib/ld-2.7.so)
==9648== by 0x5B614EC: (within /lib/libdl-2.7.so)
==9648== by 0x5B60EF0: dlopen (in /lib/libdl-2.7.so)
==9648== by 0x4E2F440: (within /usr/local/cuda/lib/libcudart.so.2.0)
==9648== Address 0x619faa8 is 16 bytes inside a block of size 20 alloc’d
==9648== at 0x4C22FAB: malloc (vg_replace_malloc.c:207)
==9648== by 0x4008B75: (within /lib/ld-2.7.so)
==9648== by 0x4012048: (within /lib/ld-2.7.so)
==9648== by 0x400DDF5: (within /lib/ld-2.7.so)
==9648== by 0x401191A: (within /lib/ld-2.7.so)
==9648== by 0x5B60F8A: (within /lib/libdl-2.7.so)
==9648== by 0x400DDF5: (within /lib/ld-2.7.so)
==9648== by 0x5B614EC: (within /lib/libdl-2.7.so)
==9648== by 0x5B60EF0: dlopen (in /lib/libdl-2.7.so)
==9648== by 0x4E2F440: (within /usr/local/cuda/lib/libcudart.so.2.0)
==9648== by 0x4E51B5B: (within /usr/local/cuda/lib/libcudart.so.2.0)
==9648== by 0x4E56105: (within /usr/local/cuda/lib/libcudart.so.2.0)

My problem is now, how do I track down where in my program this call occurs?

Apparently this is what caused the warning:

float dc;
cudaMalloc( (void
*) &dc, sizeof(float)) ; <------ this line

I can’t really understand why…