我有如下代码,在虚拟机里(ubuntu 20版本),使用gcc main.c进行编译,然后程序运行中打印的结果,len发生了修改(len 是个int变量)。同样的代码,我放到window使用eclpse(+MINGW gcc)进行编译,运行结果完成正常。 以下提问的红箭头和红框处 。
百思不得其解,求解答。
1、虚拟机ubuntu运行结果:

2、windows+eclipse+MinGW gcc运行结果:

3、程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void initArr(int *arr, int len) {
for (int i = 0; i < len; i++) {
arr[i] = rand() % 101;
}
}
void printArr(int *arr, int len) {
printf("len=[%d][", len);
for (int i = 0; i < len; i++) {
printf("%-4d", arr[i]);
}
printf("]\n");
}
int binarySearch(int data, int *arr, int startIndex, int endIndex) {
while (startIndex < endIndex) {
int mid = (startIndex + endIndex) / 2;
if (data == arr[mid])
return mid;
if (data > arr[mid]) {
startIndex = mid + 1;
continue;
}
endIndex = mid - 1;
}
//startIndex==endIndex
if (data >= arr[endIndex])
return endIndex + 1;
return endIndex;
}
void binaryInsertSort(int *arr, int len) {
//通过二分查找,找到待插入的位置
for (int i = 1; i < len; i++) {
int temp = arr[i];
printf("开始第[%d]趟排序:待插入的元素为[%d]\n", i, temp);
int pos = binarySearch(temp, arr, 0, i - 1); //前i-1的元素是有序的
printf("查询到的待插入的位置为[%d]\n", pos);
//插入(1、后移; 2、插入)
for (int j = i - 1; j >= pos; j--) {
arr[j + 1] = arr[j];
}
arr[pos] = temp;
//打印每趟排序的结果
printf("第[%d]趟排序结果:\t", i);
printArr(arr, len);
}
printf("退出排序,len=[%d]\n", len);
}
int main(void) {
// 随机生成一个(乱序)数组
int arr[10] = { 0 };
//int len=sizeof(arr)/sizeof(int);
const int len = 10;
initArr(arr, len);
// 打印原始的数组
printf("ORIGINAL:len=[%d]\t", len);
printArr(arr, len);
// 折半插入排序
printf("111:len=[%d]\n", len);
binaryInsertSort(arr, len);
printf("222:len=[%d]\n", len);
// 打印排序后的数组
printf("SORTED:len=[%d]\t\t", len);
printArr(arr, len);
return 0;
}