所以我有这个函数应该排序一些数组,但它泄漏了太多的内存导致我的程序崩溃。我试图malloc和免费char“tempwordy”,但它不起作用,仍然有一些泄漏(最后2700不同意的分配),我找不到它们:(帮助?
void quick_sort(int low,int high)
{
int pivot,j,temp,i;
char *tempwordy=malloc(40*(sizeof(char)));
if(low<high)
{
pivot=low;
i=low;
j=high;
while(i<j)
{
while((counters[i]<=counters[pivot])&&(i<high))
{
i++;
}
while(counters[j]>counters[pivot])
{
j--;
}
if(i<j)
{
temp=counters[i];
counters[i]=counters[j];
counters[j]=temp;
strcpy(tempwordy,words[i]);
strcpy(words[i],words[j]);
strcpy(words[j],tempwordy);
}
}
printf("zav");
temp=counters[pivot];
counters[pivot]=counters[j];
counters[j]=temp;
strcpy(tempwordy,words[pivot]);
strcpy(words[pivot],words[j]);
strcpy(words[j],tempwordy);
quick_sort(low,j-1);
quick_sort(j+1,high);
free(tempwordy);
}
}
答案 0 :(得分:3)
&#34;免费&#34;是在&#34;如果&#34;阻止,因此当&#34;低&gt; =高&#34;时不执行。这就是为什么最后仍然会分配一些块
答案 1 :(得分:2)
你的free()调用在if()语句中。这是代码的简化版本,仅显示内存分配。在if()关闭后移动你的free()调用:
void quick_sort(int low,int high)
{
char *tempwordy=malloc(40*(sizeof(char)));
if(low<high)
{
free(tempwordy);
}
}
答案 2 :(得分:0)
如果您觉得必须使用malloc
/ free
(但实际上并非必须),请在malloc
内if
进行free
在递归调用quick_sort
之前{1}}。这不会使你的计划变得更好,但会使它变得更好。