我在实验室的系统(使用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发布于 2019-01-15 19:27:14
您的代码中有一个错误。
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 = <something>时,你会取消对指针的引用。
也就是说,将<something>赋值给k所指向的变量。
为了使它有效,你需要给k一个值,也就是让它指向某个东西。
发布于 2019-01-15 19:28:45
swap-function没有多大意义,因为您只在函数内交换参数,但是结果使用交换运算符+将这两个值组合在一起(所以为什么要交换呢?)
并将一个值赋给一个没有指向有效对象的指针: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;
}https://stackoverflow.com/questions/54197834
复制相似问题