内存泄漏qsort

时间:2014-01-22 18:03:31

标签: c memory memory-leaks qsort

所以我有这个函数应该排序一些数组,但它泄漏了太多的内存导致我的程序崩溃。我试图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);
    }
}

3 个答案:

答案 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(但实际上并非必须),请在mallocif进行free在递归调用quick_sort之前{1}}。这不会使你的计划变得更好,但会使它变得更好。