Я пишу программу, которая читает массив записей о сотрудниках из входного файла и сортирует их отдельно, используя сортировку вставкой и быструю сортировку.Он также определяет время, затрачиваемое двумя типами для разных размеров массива.Я должен найти приблизительный размер обрезки, выше которого быстрая сортировка становится быстрее, чем сортировка вставкой.Для этого я написал функцию AssecCutoff (), которая, в свою очередь, вызывает метод testRun () ... (testRun () находит время, необходимое для сортировки определенного массива, тогда как метод ScoreCutoff () сравнивает два раза).Однако каждый раз, когда запускается программа, я получаю конкретную ошибку:
realloc(): invalid next size
Aborted (core dumped)
После отладки кода я обнаружил, что ошибка возникает во время выделения массива emp2 в testRun (), который был вreturn, вызываемая функцией valuesCutoff ().
realloc (): неверный следующий размер
Программный принятый сигнал SIGABRT, прервано.__GI_raise (sig = sig @ entry = 6) по адресу ../sysdeps/unix/sysv/linux/raise.c:51 51 ../sysdeps/unix/sysv/linux/raise.c: такого файла или каталога нет.
Может кто-нибудь сказать, пожалуйста, где я иду не так.
int estimateCutoff(empl * emp,int size){
int min=0,max=size,mid;
mid=(min+max)/2;
time t=testRun(emp,mid);
do
{
if(t.IStime<t.QStime)
min=mid;
else if(t.IStime>t.QStime)
max=mid;
else if(t.IStime==t.QStime)
return mid;
mid=(min+max)/2;
t=testRun(emp,mid);
} while(mid!=min && mid!= max);
return mid;
}
Это функция testRun()
:
time testRun(empl * emp,int size){
int i;
empl *emp1=malloc(sizeof(empl)*size);
for(i=0;i<size;i++)
{
emp1[i]=emp[i];
}
time t;
struct timeval t1,t2,t3,t4;
double elapsedTime1,elapsedTime2;
gettimeofday(&t1,NULL);
iter_insertionsort(emp1,size);
gettimeofday(&t2,NULL);
elapsedTime1=(t2.tv_sec-t1.tv_sec)*1000.0;
elapsedTime1+=(t2.tv_usec-t1.tv_usec)/1000.0;
t.IStime=elapsedTime1;
empl *emp2=malloc(sizeof(empl)*size);
for(i=0;i<size;i++)
{
emp2[i]=emp[i];
}
gettimeofday(&t3,NULL);
itr_quicksort(emp2,size,1);
gettimeofday(&t4,NULL);
elapsedTime2=(t4.tv_sec-t3.tv_sec)*1000.0;
elapsedTime2+=(t4.tv_usec-t3.tv_usec)/1000.0;
t.QStime=elapsedTime2;
return t;
}
Функция main()
приведена ниже:
#include<stack.h>
#include<quick.h>
int main(){
int arraycapacity=10;
empl * emp=malloc(sizeof(empl)*arraycapacity);
FILE * ptr=fopen("1000","r");
int size=0;
while(!feof(ptr))
{
fscanf(ptr,"%[^ ] %d\n",emp[size].name,&(emp[size].empID));
size++;
if(size==arraycapacity)
{
arraycapacity=arraycapacity*2;
emp=realloc(emp,sizeof(empl)*arraycapacity);
}
}
int mid=estimateCutoff(emp,size);
printf("mid = %d\n",mid);
fclose(ptr);
}