将double输出到std :: cout会导致分段错误(C ++)

时间:2019-02-13 10:37:47

标签: c++ visual-studio-code mingw

我是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根本没有输出。当我用doublelong double替换float时,也会发生同样的情况。打印其他任何东西都可以正常工作(字符串,charintshort等)。

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

如果有帮助,here可以看到完整的输出。

任何想法我在这里做错了吗?谢谢。

编辑:

当使用g++ -g .\src\HelloWorld.cpp -std=c++11 -o HelloWorld.exe(或仅g++ .\src\HelloWorld.cpp -o HelloWorld.exe)进行手动编译并从控制台运行该代码时,会发生同样的情况(无输出)。

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

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

编辑2:

发现了问题。我的PATH中潜伏着一个旧版本的gcc(也许来自Visual Studio或MSSQL Server?)。我只是将当前gcc移到PATH的顶部,现在一切正常。谢谢大家的帮助!

2 个答案:

答案 0 :(得分:0)

正如许多人指出的那样,这通常应该起作用。问题出在我的设置上:我的PATH变量(版本4.1)中某个地方存在旧版本的gcc。将较新版本的路径移动到PATH的开头即可解决此问题。谢谢大家的帮助。

要检查天气,您也可以执行以下操作:在项目目录中执行g++ --version。在安装gcc的目录(对我来说,这是g++.exe --version)中,将此与C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin的输出进行比较。

答案 1 :(得分:-1)

似乎您在Visual Studio中有一些配置问题。尽管在gcc中完全可以,但是要在gcc中进行编译,请执行以下操作:

g++ ["path-to-your-file"]file.cpp -o executable_file