我正在尝试实现用于合并排序的代码。我将以下代码用于合并排序,您可以查看here。问题是当我运行程序时,例如,我要求它对数组[1、2、3、4、6、5]进行排序,然后打印出排序后的数组,然后返回数组[-1560047667 1 2 3 4 5]。从我观察到的结果来看,它不会正确打印数组中最大元素的值。我的代码如下:
#include<stdio.h>
#include<stdlib.h>
void merge_sort(int A[], int start, int end){
My code for merge sort
goes here
}
int main(){
int n, i, *A;
A = (int *)malloc(n);
scanf("%d", &n);
for(i=0; i<n; i++) scanf("%d", A+i);
merge_sort(A, 0, n);
for(i=0; i<n; i++) printf("%d", *(A+i));
}
关于我犯了什么错误的任何建议?我认为问题出在输入/输出过程中,但不太确定它到底是什么。
答案 0 :(得分:2)
您的代码正在尝试发展心理能力。在使用n
之前,您正在使用scanf
,之后使用n
来确定int n, i, *A;
A = (int *)malloc(n);
scanf("%d", &n);
应该是什么。这将导致不确定的行为,例如您的代码仅在少于5个元素的情况下起作用。
n
您还没有分配足够的内存,因为这将分配int
个字节,而n
通常为4个字节(或多或少取决于计算机的体系结构)。确保分配合适的内存量的最佳方法是将sizeof(*A)
乘以A
倍数-这就是A所指向的大小。这样可以确保如果将scanf("%d", &n);
A = malloc(n*sizeof(*A));
更改为其他类型,分配代码将继续正确。
200