0

我只是不明白为什么这个 C++ 程序不想工作?帮助!

#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 环境中运行代码,我需要在编译和链接后说:
c++ -o test.x test.cpp
然后运行代码:
./test.x 0.4
现在它可以工作了。
输出是
Hello, World! sin(0.4)=0.389418
但是有人知道在编译器的控制台中输入 0.4 的方法而不是这样吗?

4

4 回答 4

2

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

并且argc仅比1使用命令行参数运行程序时更大。

于 2013-03-07T23:45:43.583 回答
2

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

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

#include <iostream>

并从用户读取浮点值,您可以执行以下操作(假设使用命名空间 std;):

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

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

于 2013-03-07T23:45:54.340 回答
1

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

于 2013-03-07T23:45:55.707 回答
-1

!!!解决了!!!

问题是:gdb 中的错误我需要更改为 intel64/idb 才能工作!!!

我已经尝试了所有不同的编译器和程序来运行它们(Netbeans、Eclipse、Qt Creator .....)

当我改变时:gdb->idb

有效!!!

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

于 2013-03-08T21:14:34.190 回答