【发布时间】:2016-02-24 07:31:21
【问题描述】:
我在 C++、Ubuntu 14.04 中运行一个多线程 Qt 应用程序,并在我不理解的 valgrind 中收到“Invalid write of size 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。
【问题讨论】:
-
您在数组表达式中使用
time_idx,而不是time_index。还是只是一个错字? -
@errikos 你是对的!我的代码中的愚蠢错误。我有一个“time_idx”和一个“time_index”,我把它们弄糊涂了……谢谢!
标签: c++ arrays multithreading memory valgrind