【问题标题】:C pointers-What is the solution of Segment fault [closed]C指针-段错误的解决方法是什么[关闭]
【发布时间】:2018-02-07 13:23:28
【问题描述】:

为什么会输出“Segmentation fault(core dumped)”

当我运行以下代码时,它显示段错误(核心转储)

#include <stdio.h>

void swap(int *, int *);

int main() {
    int x = 5, y = 10;
    swap(x, y);
    printf("%i\n %i\n", x, y);
}

void swap(int *a, int *b) {
    int s;
    s = *a;
    *a = *b;
    *b = s;
}

【问题讨论】:

  • 致电swap() - 在main() - 不正确。应该是swap(&amp;x, &amp;y)
  • 您应该在此行收到编译器警告:swap(x,y);。使用-Wall 编译。顺便说一句,swap(3,4); 会做什么?并且在格式化你的代码方面也付出了一些努力。
  • 您正在传递变量 xy 的值,不是它们的地址。
  • 正确缩进您的代码。机器(编译器)可以读取和编译任何东西,但是对于人类来说,它需要在将文本块读取为 code 时做出一点sense。提问时,文本区域右侧有一个橙色的大如何格式化框。还有一个完整的格式化辅助工具栏。还有一个 [?] 按钮提供格式化帮助。还有一个预览区域,显示您的帖子发布后的样子。使您的帖子清晰,并证明您花时间这样做,可以提高您获得好答案的机会。
  • 问题是您使用的是垃圾编译器。如果没有来自编译器的警告/错误,则不允许编译此代码。

标签: c pointers segmentation-fault swap


【解决方案1】:

问题在swap(x, y);一行

您传递的是值而不是地址。你应该得到编译器警告。

使用swap(&amp;x, &amp;y);

【讨论】:

    猜你喜欢
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2013-05-09
    • 1970-01-01
    • 2016-06-17
    • 2018-05-27
    • 1970-01-01
    相关资源
    最近更新 更多