2012-05-07 10 views
6

Byłem niedawno próbując wyśledzić kilka błędów w programie pracuję nad użyciem valgrind, a jeden z błędów Dostałem:Interpretacja błąd valgrind Nieprawidłowy zapis wielkości 4

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

linia wykraczająca # 414 czyta

amplitudes__[points_read] = 0x0; 

i amplitudes__ jest zdefiniowany wcześniej jako

uint32_t * amplitudes__ = (uint32_t*) amplitudes; 

Teraz oczywiście UInt32 _t ma długość 4 bajtów, więc jest to rozmiar zapisu, ale czy ktoś mógłby mi powiedzieć, dlaczego jest on nieprawidłowy?

Odpowiedz

4

points_read jest najprawdopodobniej poza granicami, piszesz przeszłość (lub wcześniej) pamięć przydzieloną dla amplitudes.

2

Typowym błędem nowych programistów zrobić, aby dostać to ostrzeżenie jest:

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

a następnie spróbuj do odczytu lub zapisu do pamięci w lokalizacji 'rozmiar':

many_a[size] = ...; 

Oto alokacja powinna być:

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