多次从函数返回一个数组,并在C中释放内存

时间:2017-04-08 11:35:40

标签: c arrays pointers memory free

我一直试图用C语言绕过指针一段时间,但我似乎陷入了与内存有关的问题。我正在处理一个函数,该函数多次从另一个函数返回一个数组,然后应该最终释放该数组。返回数组一次工作正常,但如果我尝试返回更多,那么一旦程序中止,我得到分段错误。该函数的代码是

double func(int n, int max, int s){
    int i;
    int *p;
    int *q;
    double diff_t;
    //start timer
    time_t start_t, end_t;
    time(&start_t);
    //generate the arrays and search for s
    for(i=0;i<100;++i){
            p=initarray(n,max);
            q=sort(n,p);
            search(s,n,q);
    }
    //calculate elapsed time
    time(&end_t);
    diff_t=difftime(end_t,start_t);
    //deallocate array
    free(p);
    return(diff_t);
}

和此函数中使用的其他函数是

int *initarray(int n, int max){
    //allocate memory for the array
    int *arr=malloc(n);

    //initialize an array
    ....

    //return the array
    return(arr);
}


int *sort(int n, int *arr){
    //sort the array
    ...

    //return the array
    return(arr);
}


int search(int i, int n, int *arr){
    int j;
    int index;
    //search the array for i
    ...
    //return the index of i in the array        
    return(index);
}

然后我在主函数中调用func作为

func(2000,10000,10)

此外,每当我尝试使用free(p)释放数组时,程序将被中止并返回双重释放或损坏错误。所以我基本上有两个问题:我不能让我的函数多次返回数组而且我最终无法释放数组。我已经在互联网上搜索了高低,但没有任何工作,所以任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:-1)

我认为问题很简单。您正在多次分配内存。但是你只释放一次内存。即:分配的最后一个内存块。只需在for循环中移动free(p)语句。

for(i=0;i<100;++i)
{
        p=initarray(n,max);
        q=sort(n,p);
        search(s,n,q);
        //deallocate array
        free(p);
}