gpt4 book ai didi

c++ - 插入排序的 Valgrind 大小为 8 的无效读取

转载 作者:行者123 更新时间:2023-11-30 01:34:33 25 4
gpt4 key购买 nike

我正在尝试执行一个非常简单的代码,但我不断收到 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 无效)

最佳答案

请注意,ijunsigned 类型。因此你的 j 循环充满了问题:

i 为 0 时:

  • 循环从 (unsigned)-1 开始( UINT_MAX)
  • j >= 0 始终为真
  • s[j] 在有效缓冲区外访问(这可能是导致 valgrind 错误的原因)

在任何迭代中:

  • j-- 最终将换行到 UINT_MAX,如果 s[j] > aux 永远不会为 false

简单地为数组索引使用有符号整数,或者更加小心使用无符号索引的反向循环,应该可以解决您的问题。

关于c++ - 插入排序的 Valgrind 大小为 8 的无效读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56105223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com