插入排序的Valgrind Invalid读取尺寸8的尺寸
Valgrind Invalid Read of Size 8 for insertion sort
我正在尝试执行一个非常简单的代码,但是我一直遇到valgrind错误。
double s[4];
double aux;
unsigned int i, j;
for(i = 0; i < 4; i++) {
aux = 5.0; // there is actually a function returning a value here
for(j = i-1; j >= 0 && s[j] > aux; j--) s[j+1] = s[j];
s[j+1] = aux;
}
这是一个简单的减少插入排序,但是我不断获得分割故障(Vaulgrind上的8个读数为8(
请注意, i
和 j
是 unsigned 类型。因此,您的j
循环充满了问题:
当i
为0:
- 循环始于
(unsigned)-1
(,即UINT_MAX
( -
j >= 0
始终是正确的 -
s[j]
在有效缓冲区外访问(这可能是导致valgrind错误的原因(
在任何迭代中:
-
j--
最终将包装到UINT_MAX
,如果s[j] > aux
从不false
简单地使用签名的整数作为您的数组索引,或在使用无符号索引的反向循环中更加谨慎,应解决您的问题。
相关文章:
- valgrind-hellgrind与泄漏检查的结果不同
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- 额外分配valgrind
- C++ "error: invalid use of void expression"
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- 收到错误"invalid use of non-static data member 'stu::n' "
- Poloniex API "Invalid command" c++ libcurl
- Valgrind:可以处理更多可能丢失的字节吗?
- 如何在程序执行时查看Valgrind Massif输出(或其他堆分析器)?
- C++/Qt Valgrind 未初始化的字节
- C++模板错误:"invalid explicitly-specified argument for template parameter"
- 在 valgrind c++ 上读取大小 8 无效
- 了解 Linux 虚拟内存:valgrind 的 massif 输出显示了有和没有 --pages-as-heap 的主要差异
- Valgrind 在 std::string::swap 中报告 SIGILL
- Valgrind 大小为 8 且地址 0x5b7e520 的读取无效,在大小为 16 的块内为 0 字节 free'd
- SDL_CreateTextureFromSurface() "Invalid texture"错误?
- C++ "Invalid use of 'this' in non-member function" ,
- 为什么gmp会在这里与"invalid next size"重新定位一起崩溃?
- 插入排序的Valgrind Invalid读取尺寸8的尺寸