首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存泄漏

内存泄漏
EN

Stack Overflow用户
提问于 2014-01-22 18:03:30
回答 3查看 414关注 0票数 0

所以我有一个函数,它应该对数组进行排序,但是它泄露了太多的内存,使我的程序无法崩溃。我试着使用malloc并释放char "tempwordy“,但是它不起作用,仍然存在一些漏洞(最后有2700个未释放的分配程序),但我找不到它们:(帮助?

代码语言:javascript
复制
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);
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-22 18:11:22

空闲()调用在if()语句中。下面是您代码的简化版本,仅显示内存分配。在if()关闭后将空闲()调用移动到:

代码语言:javascript
复制
void quick_sort(int low,int high)
{
    char *tempwordy=malloc(40*(sizeof(char)));
    if(low<high)
    {
       free(tempwordy);
    }
}
票数 2
EN

Stack Overflow用户

发布于 2014-01-22 18:09:06

"free“位于"if”块内,因此在"low>=high“时不执行。这就是为什么在最后还分配了一些块

票数 3
EN

Stack Overflow用户

发布于 2014-03-25 22:57:11

如果您认为必须使用malloc/free (但实际上不必使用),那么在quick_sort递归调用之前在if中执行malloc,并在quick_sort递归调用之前执行free。这将不会使您的程序良好,但会使它更好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21290536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档