0
我正在为我的项目寻找内存泄漏。我收到一个错误,我无法理解它的根本原因。我的代码很大,所以我会在这里放大块。Valgrind错误 - 分配后的地址为零字节 - C/C++
基本上我有在一个函数的阵列称为find_pulses
我动态分配是这样的:
float*rmsArray;
rmsArray = (float*)malloc((N-pulse_samplewidth+1)*sizeof(float));
我调试到这一点,发现N-pulse_samplewidth+1
是非零。 (其实际上〜2^21)
我填充值这阵列是这样的:
for (int loop1 = 0; loop1 < N-pulse_samplewidth; ++loop1) {
// populate rms array here.
}
我此数组发送到称为findpeak
这样另一功能:
int* ans = findpeak(rmsArray,N,pulse_samplewidth,startsec,min,max,x);
findpeak
的声明如下所示:
int* findpeak(float* data, int n, int pulse_samplewidth,float startsec,float min,float max, float* x);
的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)
以下错误我调试到这一点,我发现我有必要填充数组中的所有值。谁能告诉我这个错误究竟意味着什么?
是的,我是。为什么我之前没有注意到它如此大胆可见?无论如何非常感谢。 –