【问题标题】:valgrind "Invalid write of size 8"valgrind "大小为 8 的无效写入"
【发布时间】: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


【解决方案1】:

正如 Errikos 指出的,我使用的是“time_idx”而不是“time_index”。一个简单的错误让很多人感到悲伤。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 2017-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多