如何修复终端中的段错误错误?

时间:2018-02-04 21:30:32

标签: c linux segmentation-fault

Output of the program

我正在尝试编译我的代码,我觉得它工作得很好,我可以编译它。但是,当我这样做时,我收到了Segment错误,而且我没有看到错误在我的代码中的位置。

我得到的错误是段错误:11 我已经看了这个,我知道它与内存分配有关,但是我无法找到代码中的哪个位置来修复内存分配并修复我在这里遇到的错误。

df <- df %>% mutate(mul = a * b * x)

df
  a b x mul
1 1 5 4  20
2 1 4 3  12
3 2 3 8  48
4 3 8 9 216
5 8 6 1  48
6 9 1 8  72
7 1 0 2   0
8 3 2 3  18

1 个答案:

答案 0 :(得分:1)

当我没有传递任何参数时,我只得到段错误,因为

int n = atoi(argv[1]);

基本上会atoi(NULL),因为argv[1]将是NULL

if (argc != 2){
        fprintf(stderr, "usage: %s <starting value>\n", argv[0]);
        return 1; // <- you forgot this!
}

使用不同的值调用您的程序不会导致段错误,我已经 尝试了不同的数字。

另一个错误:main函数应定义为:

  • int main(void);
  • int main(int argc, char *argv[]);
  • int main(int argc, char **argv);

你应该改变它。见What should main() return in C and C++?

一般资料。如果您想要退出void功能,请尽情享受 要做的是使用return;没有任何价值,如下所示:

void foo(void)
{
    do_some_work();

    if(should_i_terminate)
        return;

    keep_doing_work();
}