C中的代码函数错误。程序似乎显示垃圾

C中的代码函数错误。程序似乎显示垃圾,c,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++) {

我写了一个程序来运行插入排序算法。一切似乎都很好。但当我执行它时,会有一个奇怪的结果。这些程序似乎在内存中使用了垃圾。我怎样才能修好它

#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("\n\n\n The sorted Array : \n");
    insertion_inc(Arr, size);
    print_array(Arr, size);
    return 0;
}
#包括
#包括
#包括
void insertion_inc(整数数组[],整数大小)
{
inti,j,key;
对于(i=1;i=0&&Array[j]>键)
{
数组[j+1]=数组[j];
j--;
}
数组[j++]=键;
}
}
无效插入(整数数组[],整数大小)
{
inti,j,key;
对于(i=1;i=0&&Array[j]
**输出始终如下所示:**

未排序的数组:

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

排序后的数组:

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

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

这一行:

int size = sizeof(Arr);
不会做你认为它会做的事。它返回的是字节大小,而不是元素大小

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

请参见

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

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

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

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

欢迎您使用哪种IDE?如果答案是Notepad++或类似的,那么这是一个编辑器,所以需要一个IDE。现在你已经有了,学习使用调试器;您可以设置断点,运行代码,当它遇到断点时,它将在代码中您希望它停止的一行停止。然后可以检查调用堆栈&所有变量的值,以及更多。调试器是您最好的朋友,可以为您解决这个问题,以及许多/大多数未来的问题。祝你好运,而(j>=0&&Array[j]>键)
会溢出
Array
我相信。需要一个上限检查。我用的是可视Stedio2019。是的,关于数组溢出,你是对的。那么我应该如何修改代码呢?谢谢你的回答。但是排序函数的结果呢。如果你看看结果(你知道问题的前十个数字),它就不能正常工作。我该怎么办?