我试图了解这段代码的错误:
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。
答案 0 :(得分:0)
Valgrind追踪内存读写,我想在这里告诉你,这个函数碰巧被调用了至少一个指向内存的指针,这个指针从未被写入,直到调用