#nomemoryleaks
This commit is contained in:
Binary file not shown.
@ -35,9 +35,9 @@ struct node* kdtree(struct record* points, int depth, int n) {
|
|||||||
int axis = depth % 2;
|
int axis = depth % 2;
|
||||||
|
|
||||||
if (axis == 0) {
|
if (axis == 0) {
|
||||||
qsort(points, n, sizeof(struct record*), lon_comp_func);
|
qsort(points, n, sizeof(struct record), lon_comp_func);
|
||||||
} else {
|
} else {
|
||||||
qsort(points, n, sizeof(struct record*), lat_comp_func);
|
qsort(points, n, sizeof(struct record), lat_comp_func);
|
||||||
}
|
}
|
||||||
struct record* median = &points[n / 2];
|
struct record* median = &points[n / 2];
|
||||||
struct node* new_node = malloc(sizeof(struct node));
|
struct node* new_node = malloc(sizeof(struct node));
|
||||||
@ -72,12 +72,13 @@ void free_kdtree(struct node* data) {
|
|||||||
|
|
||||||
struct node* left = data->left;
|
struct node* left = data->left;
|
||||||
struct node* right = data->right;
|
struct node* right = data->right;
|
||||||
|
free(data);
|
||||||
|
|
||||||
free_kdtree(left);
|
free_kdtree(left);
|
||||||
free_kdtree(right);
|
free_kdtree(right);
|
||||||
}
|
}
|
||||||
|
|
||||||
void lookup(struct record* closest, double closest_dist, double query[2], struct node* tree) {
|
void lookup(struct record** closest, double closest_dist, double query[2], struct node* tree) {
|
||||||
if (tree == NULL) {
|
if (tree == NULL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -85,7 +86,7 @@ void lookup(struct record* closest, double closest_dist, double query[2], struct
|
|||||||
double compare_coord[2] = {tree->point[0], tree->point[1]};
|
double compare_coord[2] = {tree->point[0], tree->point[1]};
|
||||||
double dist = calc_euclidean(query, compare_coord);
|
double dist = calc_euclidean(query, compare_coord);
|
||||||
if (dist < closest_dist) {
|
if (dist < closest_dist) {
|
||||||
closest = tree->record;
|
closest = &tree->record;
|
||||||
closest_dist = dist;
|
closest_dist = dist;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,12 +102,12 @@ void lookup(struct record* closest, double closest_dist, double query[2], struct
|
|||||||
}
|
}
|
||||||
|
|
||||||
const struct record* lookup_kdtree(struct node *data, double lon, double lat) {
|
const struct record* lookup_kdtree(struct node *data, double lon, double lat) {
|
||||||
struct record* closest = &(*data->record);
|
struct record* closest = data->record;
|
||||||
double compare_coord[2] = {data->point[0], data->point[1]};
|
double compare_coord[2] = {data->point[0], data->point[1]};
|
||||||
double query[2] = {lon, lat};
|
double query[2] = {lon, lat};
|
||||||
double closest_dist = calc_euclidean(query, compare_coord);
|
double closest_dist = calc_euclidean(query, compare_coord);
|
||||||
|
|
||||||
lookup(closest, closest_dist, query, data);
|
lookup(&closest, closest_dist, query, data);
|
||||||
|
|
||||||
return closest;
|
return closest;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user