为什么这段代码会返回分段错误?

时间:2015-09-03 00:07:56

标签: c segmentation-fault runtime-error

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char** argv){
        int xAmount = atoi(argv[1]);
        int yAmount = atoi(argv[2]);
        double coef[argc - 3];
        int i = 0;
        for(i=0; i < argc - 3; i++){
                coef[i] = atof(argv[i+3]);
        }
        for(i=0; i < argc-3; i++){
                if(i == 0){
                        printf("y = %.2f",coef[i]);
                }
                else {
                        printf(" + %.2fx^%d",coef[i],i);
                }
        }


        return 0;
}

为什么这个C代码会返回分段错误?我查看了其他一些有同样问题的例子和问题,但我在这段代码中找不到类似的问题。我错过了什么?

2 个答案:

答案 0 :(得分:2)

这种情况正在发生,因为您没有传入命令行参数,并且函数atoi(s)s为空时返回段错误。

您应该调用函数./your_program_name arg1 arg2 arg3 ...

答案 1 :(得分:0)

我在这里看到的唯一可能导致段错误的是命令行参数数组:argv。您正试图在代码的多个部分中访问此数组。

您是否将正确的命令数量和命令行参数类型传递给它?

确保将来不会发生这种情况的可能解决方案是在代码开头设置if,检查argc以确保参数的数量是否正确被传入。