C I';我有一个分段错误,但我没有找到oO?
它应该用merge排序。有两个函数:合并和排序合并。一些未知函数(从文件读取数组和打印数组)在输入文件中完全起作用 Valgrind告诉我,失败发生在array2的分配上,以及在第三个while循环的void merge中读写时C I';我有一个分段错误,但我没有找到oO?,c,arrays,dynamic,segmentation-fault,malloc,C,Arrays,Dynamic,Segmentation Fault,Malloc,它应该用merge排序。有两个函数:合并和排序合并。一些未知函数(从文件读取数组和打印数组)在输入文件中完全起作用 Valgrind告诉我,失败发生在array2的分配上,以及在第三个while循环的void merge中读写时 void merge(int* array, int start, int middle, int end) { int size = end - start + 1; int *array2 = malloc(size*sizeof(array2))
void merge(int* array, int start, int middle, int end) {
int size = end - start + 1;
int *array2 = malloc(size*sizeof(array2));
int k = start;
int m = middle + 1;
int i = 0;
int j = 0;
while ( k <= middle && m <= end ) {
if ( array[k] <= array[m] ) {
array2[i] = array[k];
k++;
}
else {
array2[i] = array[m];
m++;
}
i++;
}
while ( k <= middle ) {
array2[i] = array[k];
k++;
i++;
}
while ( m <= end ) {
array2[i] = array[k];
k++;
i++;
}
while ( j < i ) {
array[ start + j -1 ] = array2[j];
j++;
}
free(array2);
}
void merge_sort(int* array, int first, int last) {
int middle;
if ( first < last ) {
middle = ((first+last) / 2);
merge_sort (array, first, middle);
merge_sort (array, middle + 1, last);
merge (array, first, middle, last);
}
}
int main (int argc, char *argv[])
{
if (argc!=3) {
printf ("usage: %s <maximale anzahl> <dateipfad>\n", argv[0]);
exit(2);
}
char *filename = argv[2];
int *array;
int size = atoi(argv[1]);
array = malloc(size*sizeof(array));
int len = read_array_from_file(array, atoi(argv[1]), filename);
printf("Eingabe:\n");
print_array(array, len);
merge_sort(array, array[0], len);
printf("Sortiert:\n");
print_array(array, len);
free(array);
return 0;
}
void合并(int*数组、int开始、int中间、int结束){
int size=end-start+1;
int*array2=malloc(size*sizeof(array2));
int k=开始;
int m=中间+1;
int i=0;
int j=0;
而(k至少这是错误的:
int *array2 = malloc(size*sizeof(array2));
我想你的意思是:
int *array2 = malloc(size * sizeof(*array2));
您希望分配size
乘以每个条目的大小,而不是数组指针的大小
但是(在64位计算机上),这实际上会使您的数组的字节数减少一半,从而导致溢出更快发生。您有一个逻辑错误,需要通过使用调试器单步检查代码来解决。请逐步调试代码,并返回更准确的问题描述。1)array[start+j-1]=array2[j]
-->数组[start+j]=array2[j]
2合并排序(数组,数组[0],len);
-->合并排序(数组,0,len-1);
3而(非常感谢您…在我更改了3之后它工作了!数组=malloc(大小*大小*数组);