我有一個書面的C程序來查找給定點集合(隨機生成)中所有點的k個最近鄰居。問題是當我將點數(因此數組大小)增加到10000時,只要我調用函數來找出最近的鄰居,程序就會給出段違例錯誤。我無法使用調試器進入函數。一旦我做了一個「步入」程序崩潰。函數調用時段違例錯誤
我已經使用了代碼塊和Eclipse CDT(在Windows 7上),並且都在同一時間發生錯誤。在代碼塊的情況下,它給出了段違例,並且在Eclipse的情況下,它首先顯示「0x4039a7沒有可用於__chkstk_ms()的源」,然後錯誤來自操作系統本身 - 「KNN.exe已停止工作」 但是該程序在Linux(Ubuntu 32bit)上運行良好。
這裏是代碼片段:
的#define MAX_SIZE 10000
int main()
{
int n = MAX_SIZE;
int k = 3;
int i;
double points[MAX_SIZE*2]; //2-D array in row-major order
double result[MAX_SIZE*3*2];
srand(time(NULL));
for(i=0; i < n; i++)
{
points[i*2] = (double)rand()/(double)RAND_MAX;
points[i*2 + 1] = (double)rand()/(double)RAND_MAX;
}
seek(points,n,k,result); //<---------- ERROR
seek(points,n,k,result); //<------------ NO ERROR
....
}
void seek(const double * const points, int n, int k, double *result)
{
TreeNode qtree[MAX_SIZE];
int order_array[MAX_SIZE];
int num_nodes = build_quadtree(a, n, k, qtree,order_array);
......
}
結構tree_node { INT ID; int num_points; int start_order; int end_order; int parent; int child [4]; struct rectangle rect; enum boolean is_leaf; };
結構點 {x} double y; };
struct rectangle { int id; double xmin,xmax,ymin,ymax; struct point midpt; };
什麼是更令人困惑的是,我有另一個功能相同的參數運行沒有任何問題。 請提供關於如何調試的建議。
編輯: - 。我發佈了seek()函數的前幾行。正如答覆所指出的,我實際上在seek功能上分配了很多內存,但我想知道爲什麼它在linux中不是問題。
任何機會都可以看到'seek()'在做什麼? 'points []'的加載器似乎沒有任何問題。 – WhozCraig