我正在使用C ++,Ubuntu 14.04运行多线程Qt应用程序,并且使用valgrind获取“无效写入大小为8”错误,我不明白。
这是我的代码:
// Allocate memory for arrays
deltas = new double[time_count]; // (time_count is 794)
然后,我创建了一堆线程,它们将值分配到deltas
数组中:
cout << "time_index = " << time_index << endl;
deltas[time_idx] = calculated_value;
当我运行它时,打印的最高time_index是793,正如预期的那样:
time_index = 793
然而,由于某种原因,valgrind给了我以下错误:
==16575== Thread 21 Thread (pooled):
==16575== Invalid write of size 8
==16575== at 0x421508: TimeIndicator::calculate_delta(int) (algorithms.cpp:1030)
...
==16575== Address 0x107ba860 is 0 bytes after a block of size 6,352 alloc'd
Valgrind似乎认为我正在写过数组的边缘,但根据打印输出,我从不超过793,即array_size - 1.
答案 0 :(得分:0)
正如Errikos指出的那样,我被使用了&#34; time_idx&#34;而不是&#34; time_index&#34;。一个简单的错误引起了很多的悲痛。