【发布时间】:2018-06-28 12:11:29
【问题描述】:
我创建了一个插入排序方法,它接受一个数组、它的大小和一个比较器。比较器函数是这样的:
int compare_int_ptr(void* ptr1, void* ptr2) {
double i1 = *(double*)ptr1;
double i2 = *(double*)ptr2;
if(i1<i2) {
return -1;
}
if(i1 == i2) {
return 0;
}
return 1;
}
插入是这样的:
void insertion_sort(void** array, int size, CompFunction compare){
int i,j;
void* key;
for(i = 1; i<size;i++){
key = array[i];
for(j = i-1; j>=0 && compare(array[j],key)>=0;j--){
swap(&array[j+1],&array[j]);
}
array[j+1] = key;
}
}
如果我尝试执行它,我会得到分段错误错误,所以我认为我没有正确使用指针。当我进行交换时,我用 & 传递它是否正确?
编辑:这是我调用方法的地方:
int main(int argc, char const *argv[]) {
if(argc < 2) {
printf("Usage: sortingfirstusage <file_name>\n");
exit(EXIT_FAILURE);
}
double* array = load_array(argv[1]);
insertion_sort((void**)array, 3, compare_int_ptr);
free(array);
return 0;
数组已正确加载,因为我在调用插入排序之前打印了所有元素并且它们都在其中。
【问题讨论】:
-
请learn how to debug your programs。更具体地说,请了解如何使用 调试器 来捕捉发生的崩溃,以及如何在代码中定位它们发生的时间和位置。
-
您还需要提供有关如何调用该函数的信息。如果调用者传递的指针与您的函数期望/假设的指针不同,那将解释您的问题。但是,如果没有这些信息,没有人可以帮助您诊断。更一般地,当您提出问题时,最好提供minimal reproducible example(点击该链接了解更多信息)。
-
错误在哪里?您还没有展示如何生成数组。如果这是错误的,那么就会出现错误。您还没有显示交换正在做什么。它似乎需要指针,但没有大小。是函数还是宏?
-
问题已编辑
标签: c pointers segmentation-fault comparator