gpt4 book ai didi

c - 当我将指针传递给函数时出现段错误

转载 作者:行者123 更新时间:2023-11-30 14:35:54 26 4
gpt4 key购买 nike

所以我对 C 还很陌生,我有点迷失。我有一个无符号整数数组,并且有一个使用指针反转数组顺序的函数。在函数中,我传递了 2 个指针,一个用于数组的开头,一个用于数组的结尾,如下所示:

void swapedints(unsigned int *x, unsigned int *y) {
while (x != y) {
*x ^= *y;
*y ^= *x;
*x ^= *y;
x++;
y--;
}
}

当我在主函数中调用该函数时,起始指针定义为:&unsignedArray,对于我使用的数组末尾:endArray = (unsigned int *)(&unsignedArray +1) -1

当我将其传递给函数时,我遇到了段错误,有人可以解释为什么吗?

更新正确的解决方案:

    void swapedints(unsigned int *x, unsigned int *y) {
while (x < y) {
*x ^= *y;
*y ^= *x;
*x ^= *y;
x++;
y--;
}
}

startPointer = 无符号数组endPointer = unSignedArray + 数组长度-1

最佳答案

这可能是由于您编写循环的方式所致。您的停止条件是 x != y 。如果数组有偶数个元素,则这永远不会成立。

如果您 100% 确定两个指针都指向数组内的元素,您可以这样做:

void swapedints(unsigned int *x, unsigned int *y) {
while (x < y) {
*x ^= *y;
*y ^= *x;
*x ^= *y;
x++;
y--;
}
}

请务必确保 xy两者都指向数组的元素。否则你的程序might fail in strange ways 。例如,条件 x < y即使它们指向完全不同的事物,也可能总是正确的。

我也对你计算数组末尾的示例非常怀疑。你向我们展示的这个算术毫无意义。您可能应该以如下方式使用该函数:

int main(void)
{
int array[6] = {1, 2, 3, 4, 5, 6};
swapedints(array, array + 5);
// print the array
}

关于c - 当我将指针传递给函数时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58279337/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com