2012-05-07 22 views
6

poco estuve tratando de localizar a algunos errores en un programa que estoy trabajando en el uso de valgrind, y uno de los errores que obtuve fue:Interpretación de error valgrind escritura no válida de tamaño 4

==6866== Invalid write of size 4 
==6866== at 0x40C9E2: superneuron::read(_IO_FILE*) (superneuron.cc:414) 

la línea en cuestión # 414 lecturas

amplitudes__[points_read] = 0x0; 

y amplitudes__ se define anteriormente como

uint32_t * amplitudes__ = (uint32_t*) amplitudes; 

Ahora, obviamente, un uint32 _t tiene 4 bytes de longitud, así que este es el tamaño de escritura, pero ¿podría alguien decirme por qué no es válido?

Respuesta

4

points_read es probable que esté fuera de límites, está escribiendo pasado (o antes) la memoria que asignó para amplitudes.

2

un error típico de los nuevos programadores lo hacen para obtener esta advertencia es:

struct a *many_a; 
many_a = malloc(sizeof *many_a * size + 1); 

y luego tratar de leer o escribir en la memoria en el 'tamaño' ubicación:

many_a[size] = ...; 

Aquí la asignación debe ser:

many_a = malloc(sizeof *many_a * (size + 1)); 
Cuestiones relacionadas