将double打印到std::cout会导致Segmentation fault(C++)

Printing a double to std::cout results in Segmentation fault (C++)

本文关键字:Segmentation fault C++ 打印 double std cout      更新时间:2023-10-16

我是C++的新手,想打印出一个双值。并不是说我真的需要打印这个值,我只是想知道这里出了什么问题。

这是我的代码(HelloWorld.cpp):

#include <iostream>
int main() {
double i = 5.5;
std::cout << i << std::endl;
return 0;
}

在附加调试器的情况下执行此操作会导致以下错误:

Thread 1 hit Breakpoint 1, main () at src/HelloWorld.cpp:4
4       double i = 5.5;
Thread 1 received signal SIGSEGV, Segmentation fault.
0x00000000929ba260 in ?? ()

当我在其中放置断点时,创建和分配变量是没有问题的。只有当程序应该打印该值时,才会出现错误。在没有调试器的情况下执行exe将导致根本没有输出。当我用long doublefloat替换double时,也会发生同样的情况。打印任何其他内容都可以正常工作(字符串、charintshort等)。

我使用的是Visual Studio代码和MinGW(x86_64-8.1.0-posix-seh-rt_v6-rev0)。VS代码正在使用以下文件进行编译/调试:

  • c_cpp_properties.json
  • launch.json
  • tasks.json

在这里您可以看到完整的输出,以防有帮助。

知道我在这里做错了什么吗?非常感谢。

编辑:

当使用g++ -g .srcHelloWorld.cpp -std=c++11 -o HelloWorld.exe(或仅使用g++ .srcHelloWorld.cpp -o HelloWorld.exe)手动编译并从控制台运行时,也会发生同样的情况(没有输出)。

我使用以下设置从这里安装了MinGW:

  • 版本:8.1.0
  • 架构:x86_64
  • 线程:posix
  • 例外:seh
  • 内部版本:0

编辑2:

发现问题。有一个旧版本的gcc潜伏在我的PATH中(可能来自Visual Studio或MSSQL Server?)。我只是将当前的gcc移到PATH的顶部,现在它工作得很好。谢谢大家的帮助!

正如许多人指出的那样,这通常是可行的。问题出在我的设置上:我的PATH变量(4.1版)中有一个旧版本的gcc。将新版本的路径移到PATH的开头可以解决这个问题。谢谢大家的帮助。

要检查是否也会发生同样的情况,您可以执行以下操作:在项目目录中执行g++ --version。当您在安装gcc的目录中时,将其与g++.exe --version的输出进行比较(对我来说,这是C:Program Filesmingw-w64x86_64-8.1.0-posix-seh-rt_v6-rev0mingw64bin)。

相关文章: