【问题标题】:Can't execute C code (originally executed in DevC++) on mac [duplicate]无法在 Mac 上执行 C 代码(最初在 DevC++ 中执行)[重复]
【发布时间】:2019-01-15 11:19:58
【问题描述】:

我在实验室系统(使用 Windows)上用 C 语言解决了这个简单的问题。我使用 DevC++ 编写了这段代码,它在 DevC++ 上运行,但我无法在我的 Mac 系统上编译相同的代码。

代码:

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

int* oddSwap(int x, int y)
{
    int temp = x;
    x = y * 5;
    y = temp * 5;
    int *k;
    *k=x+y;
    return k;
}

int main()
{
    int x=5;
    int y=3;
    int *k=oddSwap(x,y);
    printf("\n%d", *k);
    return 0;
}

这在 Windows (DevC++) 上运行,但我在 macOS (macOS 10.14.2) 上运行时收到此错误消息。

Bus error: 10

【问题讨论】:

  • 将内存分配给int *kint *k; *k=x+y;你有UB。
  • 你有一个指针k,但是它指向哪里?是时候了解undefined behavior了。
  • 标志“-Wall”或“-Wuninitialized”对于这些问题非常有用。

标签: c macos gcc dev-c++


【解决方案1】:

swap-函数没有多大意义,因为您只在函数内交换参数,但结果随后将两个值与交换运算符 + 组合在一起(那么为什么要交换呢?)。

然后你给一个不指向有效对象的指针赋值:int *k; *k=x+y;。但无论如何,完整的操作对我来说没有意义。

也许你想要这样的东西:

void oddSwap(int *x, int *y)  {
   int temp = *x;
   *x = *y * 5;
   *y = temp * 5;
}

int main()
{
    int x=5;
    int y=3;
    oddSwap(&x,&y);
    printf("\n%d:%d", x,y);
    return 0;
}

【讨论】:

    【解决方案2】:

    您的代码中有错误。

    int* oddSwap(int x, int y)
    {
        int temp = x;
        x = y * 5;
        y = temp * 5;
        int *k; // <-- the pointer 'k' is never given a value, yet you de-reference it below.
        *k=x+y; // <-- this operation is invalid.
        return k;
    }
    

    当您执行*k = &lt;something&gt; 时,您取消引用指针。

    也就是说,你将&lt;something&gt;分配给k指向的变量。

    要使其有效,您需要给 k 一个值,即使其指向某物。

    【讨论】:

    • 知道了。谢谢!
    猜你喜欢
    • 2018-10-25
    • 2016-10-12
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 2021-10-22
    • 2017-09-24
    • 1970-01-01
    • 2015-08-29
    相关资源
    最近更新 更多