我一直试图用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)释放数组时,程序将被中止并返回双重释放或损坏错误。所以我基本上有两个问题:我不能让我的函数多次返回数组而且我最终无法释放数组。我已经在互联网上搜索了高低,但没有任何工作,所以任何帮助将不胜感激!
答案 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);
}