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。是的,关于数组溢出,你是对的。那么我应该如何修改代码呢?谢谢你的回答。但是排序函数的结果呢。如果你看看结果(你知道问题的前十个数字),它就不能正常工作。我该怎么办?