C/C++错误gdb atof(argv [1])需要更改为idb才能正常工作

C/C++错误gdb atof(argv [1])需要更改为idb才能正常工作

问题描述:

我只是不明白为什么这个C++程序不想工作? 帮助!C/C++错误gdb atof(argv [1])需要更改为idb才能正常工作

#include <iostream> 
#include <cstdlib> 
#include <cmath> 
using namespace std; 
int main (int argc, char* argv[]) 
{ 
    // convert the text argv[1] to double using atof: 
    double r = atof(argv[1]); 
    double s = sin(r); 
    cout << "Hello, World! sin(" << r << ")=" << s << endl; 
    // success 
    return 0; 
} 

报告:

"/usr/bin/gmake" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf 
gmake[1]: Entering directory /home/aleksandar/NetBeansProjects/CppApplication_2' 
"/usr/bin/gmake" -f nbproject/Makefile-Debug.mk dist/Debug/GNU_Compiler_Collection-Linux-x86/cppapplication_2 
gmake[2]: Entering directory /home/aleksandar/NetBeansProjects/CppApplication_2 
mkdir -p build/Debug/GNU_Compiler_Collection-Linux-x86 
rm -f build/Debug/GNU_Compiler_Collection-Linux-x86/main.o.d 
g++ -c -g -MMD -MP -MF build/Debug/GNU_Compiler_Collection-Linux-x86/main.o.d -o build/Debug/GNU_Compiler_Collection-Linux-x86/main.o main.cpp 
mkdir -p dist/Debug/GNU_Compiler_Collection-Linux-x86 
g++ -o dist/Debug/GNU_Compiler_Collection-Linux-x86/cppapplication_2 build/Debug/GNU_Compiler_Collection-Linux-x86/main.o 
gmake[2]: Leaving directory `/home/aleksandar/NetBeansProjects/CppApplication_2' 
gmake[1]: Leaving directory `/home/aleksandar/NetBeansProjects/CppApplication_2' 

BUILD SUCCESSFUL (total time: 613ms) 

RUN FAILED (exit value 1, total time: 78ms) 

/usr/local/netbeans-7.2.1/ide/bin/nativeexecution/dorun.sh: line 33: 7673 Segmentation fault sh "${SHFILE}" Press [Enter] to close the terminal ...

更新:上大学

我已经联系教授和解决方案,他告诉我的是:

如果我想在unix/linux环境下运行代码,我需要aft呃编译和链接用说:
c++ -o test.x test.cpp
然后运行代码为:
./test.x 0.4
而现在它的工作原理。
输出是
Hello, World! sin(0.4)=0.389418
但有谁知道在编译器中输入0.4的控制台的方式,而不是像这样?

+1

当我的C++程序不想工作,我拔出我的鞭子。无论如何,我猜'argv [1]'不存在。 – chris 2013-03-07 23:43:28

+0

您确定您的程序是崩溃的程序,因为您只共享了构建工具的输出。此外,你的main()不会检查它是否收到足够的参数来获得有效的argv [1]。更多信息将有所帮助。 – 2013-03-07 23:45:32

argv[1]仅在argc >= 2有效。你应该检查你的代码。

argc仅当您使用命令行参数运行程序时才会大于1

这是崩溃,因为您不一定向程序发送命令行参数。 argv [0]始终是您正在运行的可执行文件的名称,但不保证argv [1]存在或被允许取消引用。

如果您有兴趣从用户那里获得输入,您应该使用位于标头iostream中的std :: cin。你可以在你的程序

#include <iostream> 

,并阅读来自用户的浮点值,你可以不喜欢下面的顶部下面的代码包括它(使用假设空间std):

float var; 
cout << "Enter a number: "; 
cin >> var; 

并且在代码执行后,var将包含用户输入的浮点值。

+0

我已经联系了那所大学的教授,他告诉我的解决方案是:
“如果你在unix/linux环境下运行代码,编译并链接后说 'C++ -o test.x test.cpp' 你运行的代码为 './test.x 0.4'“ 但我仍然不明白为什么它需要这样? – Aleksa 2013-03-08 09:05:50

您没有提供任何命令行参数,因此argv[1]会导致分段错误。

!!!已解决!!!

该probem是:gdb中的错误我需要更改为intel64/idb工作!

我已经竭尽所能不同的编译器和运行这些程序(Netbeans的,Eclipse的 ,Qt Creator的.....)

当我改变了:GDB-> IDB

IT工作! !

错误报道: http://sourceware.org/bugzilla/show_bug.cgi?id=15257

+0

从您提供的信息来看,这在您的项目设置中看起来像是一个问题,而不是在'gdb'中。你是否在NetBeans中设置了项目的“命令行参数”? – 2013-03-08 21:31:13