메모리 누수에 대한 프로젝트의 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
선언은 다음과 같이됩니다.
, 나는 다음과 같이 스택에 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)
에 다음과 같은 오류가 나는이 시점까지 디버깅을했고 필자는 필요에 따라 배열에 모든 값을 채웠다는 것을 알았다. 누구든지 오류가 실제로 무엇을 의미하는지 말해 줄 수 있습니까 ??
1. 그래 난이었다 더 이상이다. 왜 그렇게 눈에 띄지 않을 때 더 일찍 이것을 눈치 채지 못했을까요? 어쨌든 고마워. –