std::isinf 在使用 valgrind 运行时程序不起作用

std::isinf doesn't work when the program is run with valgrind

提问人:Piotr Siupa 提问时间:2/10/2023 更新时间:2/10/2023 访问量:67

问:

我有这个简单的程序:

test.cc:

#include <limits>
#include <iostream>
#include <cmath>
int main() {
    std::cout << (std::isinf(std::numeric_limits<long double>::infinity()) ? "true" : "false") << std::endl;
}

当我正常运行时,结果符合预期:

g++ -std=c++17 -Wall -Wextra -pedantic -O0 -g3 test.cc && ./a.out:

true

但是,当我使用 valgrind 运行它时,它会打印 .false

g++ -std=c++17 -Wall -Wextra -pedantic -O0 -g3 test.cc && valgrind --leak-check=full -- ./a.out:

==2680== Memcheck, a memory error detector
==2680== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==2680== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
==2680== Command: ./a.out
==2680==
false
==2680==
==2680== HEAP SUMMARY:
==2680==     in use at exit: 0 bytes in 0 blocks
==2680==   total heap usage: 2 allocs, 2 frees, 73,728 bytes allocated
==2680==
==2680== All heap blocks were freed -- no leaks are possible
==2680==
==2680== For lists of detected and suppressed errors, rerun with: -s
==2680== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

为什么会这样?

(我使用“g++ (Ubuntu 10.3.0-1ubuntu1~20.04) 10.3.0”和“valgrind-3.15.0”。

C G++ Valgrind 无穷大

评论

3赞 KamilCuk 2/10/2023
Valgrind 不支持 long double。stackoverflow.com/questions/44102050/...回答了你的问题吗?
0赞 Piotr Siupa 2/10/2023
@KamilCuk 这似乎是问题所在。不过,另一个问题没有任何解决方案。
0赞 Some programmer dude 2/10/2023
虽然 Valgrind 很有用,但不要将其用作您唯一的工具。由于您使用的是 GCC,因此它有消毒剂,也可以使用。例如,既有内存错误,也有泄漏清理剂。请参阅文档中的选项。但同样,不要将它们用作唯一的工具,使用 Valgrind,但要注意它的缺点(以及消毒剂的缺点),并让不同的工具相互补充-fsanitize
0赞 Piotr Siupa 2/10/2023
@Someprogrammerdude 好吧,现在的问题是我不能将 valgrind 用作唯一的工具或补充工具,因为它破坏了我的程序。
1赞 ks1322 2/10/2023
您可以使用 GCC 选项强制使用 64 位类型。long double-mlong-double-64

答: 暂无答案