这是一个非常基本的问题,我认为我仍然误解了一些非常基本的问题。在我的工作中,我试图使用其他人在过去编写的代码并看到错误我和#39;我无法解决。
下面是代码。我在函数Partition2中得到错误。在float pivot = arr[left][0];
行。我试过float pivot = *(*(arr+left)+0);
,但它是一样的。我知道arr
的类型为float [300] [1]。如何使用最小修改的功能?
在test.c中
#define post_nms_topN 300
float unit_bbox_pred[post_nms_topN][4];
float unit_cls_prob[post_nms_topN][1];
...
main()
{
...
QuickSort2((float **)unit_cls_prob,0,post_nms_topN-1,(float **)unit_bbox_pred);
..
}
在QuickSort2.c中
...
int Partition2(float **arr, int left, int right, float **prop)
{
float pivot = arr[left][0]; // <=== seg. fault
//float pivot = *(*(arr+left)+0);
int low = left+1;
int high = right;
while(low <= high)
{
while(pivot <= arr[low][0] && low <= right)
low++;
while(pivot >= arr[high][0] && high >= (left+1))
high--;
if(low <= high)
Swap2(arr, low, high, prop);
}
Swap2(arr, left, high, prop);
return high;
}
void QuickSort2(float **arr, int left, int right, float **prop)
{
int pivot;
if(left <= right)
{
pivot = Partition2(arr, left, right, prop);
QuickSort2(arr, left, pivot-1, prop);
QuickSort2(arr, pivot+1, right, prop);
}
}
答案 0 :(得分:2)
我想我仍然误解了一些非常基本的东西
事实上。指针指针不是2D数组,也不能用于指向2D数组。这是一个常见的误解,因为我们经常可以使用常规指针代替1D数组。我们会得到一个指向第一个元素的指针。然而,数组不是指针,请参阅Is an array name a pointer in C?
2D数组的第一个元素是数组,而不是单个项。你不能设置指向指针的指针,因为指针指针只能用于一个指针数组,这是完全不同的。
关于如何修复您的功能,请参阅Ways to pass 2D Array to function in C。这里有一个代码示例,以及关于数组在用作函数参数时如何“衰减”的更深入的解释。