C语言中的代码功能错误,程序似乎显示垃圾



我写了一个程序来运行插入排序算法。一切似乎都很好。 但是当我执行它时,有一个奇怪的结果。 似乎程序在内存中使用垃圾。 我该如何解决它?

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void insertion_inc(int Array[], int size)
{
int i, j, key; 
for (i = 1; i < size; i++)
{
j = i - 1;
key = Array[i];
while (j >=0 && Array[j]>key )
{
Array[j + 1] = Array[j];
j--;
}
Array[j++] = key;
}
}

void insertion_dec(int Array[], int size)
{
int i, j, key;
for (i = 1; i < size; i++)
{
j = i - 1;
key = Array[i];
while (j >= 0 && Array[j] < key)
{
Array[j + 1] = Array[j];
j--;
}
Array[j++] = key;
}
}
void print_array(int arr[], int size)
{
for (int i = 0; i < size; i++)
printf(" %d ", arr[i]);
}

/////////////////////////////////////////////
int main()
{
time_t t;
srand((unsigned)time(&t));
int Arr[10];
int size = sizeof(Arr);
printf("The unsorted Array : n ");
for (int i = 0; i < size;i++)
Arr[i] = rand()/10;
print_array(Arr, size);
printf("nnn The sorted Array : n");
insertion_inc(Arr, size);
print_array(Arr, size);
return 0;
}

输出始终如下所示:**

未排序的数组:

1223 54 87 2 68 29 57 97 12 -858993460 272204808 7601072 7742451 1 15039136 15044096 1 15039136 15044096 7601164 7742023 272204692 7738189 7738189 8462336 0 0 0 0 0 0 0 0 0 0 0 7775604 7775616 0 7601080 0 7601272

排序数组:

23 23 23 23 23 23 23 23 23 23 23 23 2323 23 57 68 7601272 7738189 7738189 7738189 7742023 7775616 8462336 8462336 8462336 15039136 15039136 15039136 15039136 15044096 272204692 272204808 272204808 272204808 272204808 272204808 272204808 272204808 272204808

即使我忽略了srand()rand()的使用,仍然存在问题。

这一行:

int size = sizeof(Arr);

不做你认为它做的事情。它返回以字节为单位的大小,而不是元素

请参阅如何在 C 语言中确定数组的大小?

您没有正确计算数组大小:

int size = sizeof(Arr);

sizeof运算符给出其操作数的大小(以字节为单位(。 因此,假设系统上的int为 4 个字节,则sizeof(Arr)计算结果为 40。

相反,您希望将数组的大小除以数组中元素的大小,以获得元素的数量。

int size = sizeof(Arr) / sizeof(*Arr);

最新更新