cmp函数qsort中未初始化的值

时间:2015-07-30 10:31:58

标签: c++ memory-leaks profiling valgrind

我试图了解这段代码的错误:

    else if timerRunning==true && timerCount==timerMaximum {
        timer.invalidate()
        timerRunning = false
        timerCount=0
        timerLabel.text="0 secs"
        intervalAlert()
    }

这是qsort的比较器函数,它工作正常,但是当我用valgrind对它进行分析时,我在这个字符串中有这个消息条件跳转或移动取决于未初始化的值

if timerRunning==false{
        timer=NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("Counting"), userInfo: nil, repeats: true)
        timerRunning=true
    }

qsort正在调用here

valgrind输出

int myCompare( const void * v1, const void * v2 ){
   const int * f1 = static_cast<const int *>(v1);
   const int * f2 = static_cast<const int *>(v2);
   if( f1[ 0 ] < f2[ 0 ] ) return -1;
   if( f1[ 0 ] > f2[ 0 ] ) return +1;
   return 0;
}

更新

实际上在我使用这个排序函数的owOpenCLSolver类中我没有一个地方缓冲区_particleIndex(将要排序的缓冲区)显式初始化但是初始化是在函数copy_buffer_from_device进行复制从OpenCL设备到主机程序缓冲区的数据。可能问题在于,当函数使用它时,valgrind并不认为_particleIndex不是init。

1 个答案:

答案 0 :(得分:0)

Valgrind追踪内存读写,我想在这里告诉你,这个函数碰巧被调用了至少一个指向内存的指针,这个指针从未被写入,直到调用