gpt4 book ai didi

c - 源中的什么导致平台相关的结果

转载 作者:行者123 更新时间:2023-12-04 09:41:55 24 4
gpt4 key购买 nike

我用 C 编写了合并排序算法,并在本地和远程编译了它。我假设源代码中的某些内容导致平台依赖。

#include <stdio.h>
#include <limits.h>
#include <math.h>

void merge(int A[], int p, int q, int r) {
int n1 = q - p + 1;
int n2 = r - q;

int L[n1];
int R[n2];

for (int i = 0; i < n1; ++i) {
L[i] = A[p + i];
}

for(int j = 0; j < n2; ++j) {
R[j] = A[q + j + 1];
}

L[n1] = INT_MAX;
R[n2] = INT_MAX;

int i = 0;
int j = 0;

for (int k = p; k <= r; ++k) {
if (L[i] <= R[j]) {
A[k] = L[i];
i = i + 1;
} else {
A[k] = R[j];
j = j + 1;
}
}
}

void merge_recurse(int A[], int p, int r) {
if (p < r) {
int q = floor((p + r) / 2);
merge_recurse(A, p, q);
merge_recurse(A, q + 1, r);
merge(A, p, q, r);
}
}

void merge_sort(int A[], size_t length) {
merge_recurse(A, 0, (int)length - 1);
}

int main() {
int length = 9;
int A[] = { 3, 7, 61, 3, 40, 4, -1, 8, 10 };

merge_sort(A, length);

for (int i = 0; i < length; ++i) {
printf("%i, ", A[i]);
}

return 0;
}

编译时 online返回正确的结果。
-1, 3, 3, 4, 7, 8, 10, 40, 61,

但是,当我在 Linux 上本地编译源代码时,会返回错误的结果。
-1, 4, 8, 10, 2147483647, 3, 7, 40, 61

源代码中是什么导致了这些不同的结果?

最佳答案

L[n1] = INT_MAX;写入超过数组的末尾。声明int L[n1];创建一个可以从 0 索引的数组至 n1-1 .没有L[n1] . R[n2] = INT_MAX 也一样;

当代码写到数组末尾时,它可能会以改变代码行为的方式踩踏另一个变量。或者它可能没有任何可观察到的效果。在线编译器恰好以一种没有发生任何坏事的方式在内存中排列变量。它是完全不可预测的,被称为 undefined behavior .

关于c - 源中的什么导致平台相关的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62294154/

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