2014-07-22 1 views
0

메모리 누수에 대한 프로젝트의 valgrinding입니다. 나는 그것의 근본 원인을 이해할 수없는 실수를하고있다. 내 코드가 너무 커서 여기에 청크를 넣을 것이다. I이 점 디버그 및 N-pulse_samplewidth+1 비 제로가 있음을 발견Valgrind 오류 - 주소 할당 후 0 바이트입니다. - C/C++

float*rmsArray; 
    rmsArray = (float*)malloc((N-pulse_samplewidth+1)*sizeof(float)); 

:

기본적 I 함수에서 배열 I 동적 할당과 같은 그 find_pulses 불렀다. (그 사실 ~ 2^21)

I는 다음과 같이이 배열에 값을 채우는 :

int* ans = findpeak(rmsArray,N,pulse_samplewidth,startsec,min,max,x); 

:

for (int loop1 = 0; loop1 < N-pulse_samplewidth; ++loop1) { 
// populate rms array here. 
} 

I 이렇게 findpeak 불리는 다른 기능이 배열 보내 findpeak 선언은 다음과 같이됩니다.

함수 내에서 617,451,515,

, 나는 다음과 같이 스택에 data에서 특정 값을 추가

std::stack<float> peaks_y; 
for (int loop1 = 0; loop1 < n; ++loop1) { 
if(some condition) 
{ 
peaks_y.push(data[loop1]); // point of error. 
} 
} 

내가 스택에 밀어 장소, 나는 Valgrind의

==17917== Invalid read of size 4 
==17917== at 0x4109C2: findpeak(float*, int, int, float, float, float, float*) (stat_utility.C:358) 
==17917== by 0x410778: find_pulses(int, float*, int, int, float) (stat_utility.C:321) 
==17917== by 0x410F46: find_pulses(int, floatcomplex *, int, int, float) (stat_utility.C:426) 
==17917== by 0x403385: main (DetectRFI.C:207) 
==17917== Address 0x18796c20 is 0 bytes after a block of size 8,326,112 alloc'd 
==17917== at 0x4C2AB80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) 
==17917== by 0x410507: find_pulses(int, float*, int, int, float) (stat_utility.C:285) 
==17917== by 0x410F46: find_pulses(int, floatcomplex *, int, int, float) (stat_utility.C:426) 
==17917== by 0x403385: main (DetectRFI.C:207) 

에 다음과 같은 오류가 나는이 시점까지 디버깅을했고 필자는 필요에 따라 배열에 모든 값을 채웠다는 것을 알았다. 누구든지 오류가 실제로 무엇을 의미하는지 말해 줄 수 있습니까 ??

답변

5

너는 rmsArray의 끝을 넘어 읽고있다. 당신은 실제 크기가 N-pulse_samplewidth+1 인 배열 크기로 N을 취급하기 때문에입니다

미만 Npulse_samplewidth을 가정하는 것은

+0

1. 그래 난이었다 더 이상이다. 왜 그렇게 눈에 띄지 않을 때 더 일찍 이것을 눈치 채지 못했을까요? 어쨌든 고마워. –

관련 문제