【问题标题】:Runtime string error C++运行时字符串错误 C++
【发布时间】:2023-03-14 04:10:02
【问题描述】:

我有这样的代码

#include <iostream>
#include <string>

using namespace std;

void Test(){
    string line;
}

int main(){
    cout << "test " << endl;
    return 0;
}

代码是可编译的,但是当我尝试运行它时,程序停止工作。然后用 gdb 发现我的程序出了什么问题

 (gdb) run
 Starting program: E:\CPP\Program dinamis\a.exe
 [New Thread 4892.0x1d4c]
 test
 Program received signal SIGILL, Illegal instruction.
 0x6fcc43c3 in libstdc++-6!_ZSt4cout () from C:\MinGw\bin\libstdc++-6.dll

我不明白它有什么问题。我通过输入 g++ -v 使用 MinGW (G++) 作为我的编译器:

 E:\CPP\Program dinamis>g++ -v
 Using built-in specs.
 COLLECT_GCC=g++
 COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.6.2/lto-wrapper.exe
 Target: mingw32
 Configured with: ../gcc-4.6.2/configure --enable-
 languages=c,c++,ada,fortran,objc,obj-c++ --disable-sjlj-exceptions --with-dwarf2 
 --enable-shared --enable-libgo
 mp --disable-win32-registry --enable-libstdcxx-debug --enable-version-specific-  
 runtime-libs --build=mingw32 --prefix=/mingw
 Thread model: win32
 gcc version 4.6.2 (GCC)

但如果我在我的 Visual Studio 上编写相同的代码,程序运行良好且不会出错。我应该如何处理我的 G++

【问题讨论】:

  • 你是怎么编译的?我已经看到当您生成处理器不支持的 SSE 指令时会发生这种情况。
  • 我只使用 G++ 命令,例如 g++ -o a.exe filename.cpp @RetiredNinja

标签: c++ gcc compilation compiler-errors


【解决方案1】:

您实际上并没有使用测试功能进行输出,您可以按如下方式使用它,但不确定为什么会出现任何错误,因为对我来说它在 GNU GCC 版本 4.8.1 下运行良好

这是一个使用 Test() 的代码示例

#include <iostream>
#include <string>

using namespace std;

string Test(){
    string line = "My text Line here!";
    return line;
}

string Test2(){
    return "My text Line2 here!";
}

int main(){
    cout << Test() << endl;
    cout << Test2() << endl;
    return 0;
}

第二个测试是为了说明返回字符串的更简单用法,注意函数也需要定义为返回字符串。

【讨论】:

  • 您上面提供的程序仍然无法运行
  • 报告什么错误?你是什​​么意思停止工作?我问它在 gcc 4.8.1 和 ms vs 2010 和 2012 中对我来说很好
  • 该程序没有提供任何错误详情,它只是弹出一个新窗口,显示“a.exe 已停止工作”。 @GMasucci
  • 听起来可能有其他问题,因为我无法复制您遇到的错误。您使用的是什么版本的 GCC(我认为是 4.6.2?)和操作系统?
  • 是的,我使用 GCC 版本 4.6.2,我使用 Windows 8 作为我的操作系统 @gmasucci
【解决方案2】:

最后我找到了解决方案。我在 Windows 8 操作系统上运行,似乎主要问题是在编译源代码时链接过程。

假设文件名是mycode.cpp,我只是运行带有额外-static-libgcc -static-libstdc++ 选项的命令:

 g++ "mycode.cpp" -o mycode -static-libgcc -static-libstdc++

【讨论】:

    【解决方案3】:

    只是瞎拍,尝试处理main函数参数:

    int main(int, char**)
    {
    //...
    

    也许是堆栈的问题...?

    【讨论】:

      猜你喜欢
      • 2014-07-26
      • 1970-01-01
      • 2013-10-08
      • 1970-01-01
      • 2016-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多