valgrind“写入大小为8的无效”

时间:2015-11-21 23:38:23

标签: c++ arrays multithreading memory valgrind

我正在使用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.

1 个答案:

答案 0 :(得分:0)

正如Errikos指出的那样,我被使用了&#34; time_idx&#34;而不是&#34; time_index&#34;。一个简单的错误引起了很多的悲痛。