diff --git a/similarity_search.c b/similarity_search.c index 1892d37..6dc750a 100644 --- a/similarity_search.c +++ b/similarity_search.c @@ -307,24 +307,17 @@ SearchResult* search_index(SearchIndex* index, const char* query, float cutoff, // Sort results by similarity qsort(temp_results, *num_results, sizeof(SearchResult), compare_results); - // Allocate final result array with exact size - SearchResult* results = (SearchResult*)malloc(*num_results * sizeof(SearchResult)); + // Shrink temp_results to exact size and return it directly + SearchResult* results = (SearchResult*)realloc( + temp_results, *num_results * sizeof(SearchResult)); if (!results) { - // Free all strings in temp_results + // realloc failure – temp_results unchanged, clean up for (int i = 0; i < *num_results; i++) { free(temp_results[i].string); } free(temp_results); return NULL; } - - // Copy results to final array - for (int i = 0; i < *num_results; i++) { - results[i].string = temp_results[i].string; - results[i].similarity = temp_results[i].similarity; - } - free(temp_results); - return results; } @@ -337,4 +330,4 @@ void free_search_results(SearchResult* results, int num_results) { free(results[i].string); } free(results); -} \ No newline at end of file +}