所以我有一个函数,它应该对数组进行排序,但是它泄露了太多的内存,使我的程序无法崩溃。我试着使用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);
}
}发布于 2014-01-22 18:11:22
空闲()调用在if()语句中。下面是您代码的简化版本,仅显示内存分配。在if()关闭后将空闲()调用移动到:
void quick_sort(int low,int high)
{
char *tempwordy=malloc(40*(sizeof(char)));
if(low<high)
{
free(tempwordy);
}
}发布于 2014-01-22 18:09:06
"free“位于"if”块内,因此在"low>=high“时不执行。这就是为什么在最后还分配了一些块
发布于 2014-03-25 22:57:11
如果您认为必须使用malloc/free (但实际上不必使用),那么在quick_sort递归调用之前在if中执行malloc,并在quick_sort递归调用之前执行free。这将不会使您的程序良好,但会使它更好。
https://stackoverflow.com/questions/21290536
复制相似问题