2012-05-07 7 views
6

나는 최근에 내가 Valgrind의를 사용하여 작업하고있는 프로그램에서 몇 가지 버그를 추적하려고했다, 그리고 내가 가진 오류 중 하나가되었다 :해석 Valgrind의 오류 잘못된 쓰기 4

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

위반 라인 # (414)는

amplitudes__[points_read] = 0x0; 

을 읽고 amplitudes__ 분명 지금

uint32_t * amplitudes__ = (uint32_t*) amplitudes; 

UINT32로 이전 정의 _t는 4 바이트 길이이므로이 크기는 쓰기가되지만 누군가가 왜 유효하지 않은지를 말해 줄 수 있습니까?

답변

4

points_read이 범위를 벗어날 가능성이 높습니다. amplitudes에 할당 된 메모리를 과거 또는 이전에 작성하고 있습니다.

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

다음 읽거나 위치 '크기'에 메모리에 기록하려고 :

2

일반적인 실수 새로운 프로그래머가이 경고를 얻을 할 것은 여기에

many_a[size] = ...; 

할당을한다 be :

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