0
.txt 파일의 역전 횟수를 계산하는 프로그램을 작성했습니다 (첫 번째 숫자 - 숫자가 아닌 숫자 자체). 작은 입력 (5 또는 10 수)에 그것을 잘 작동하지만, 입력은 10 만 개 숫자 (각 숫자보다 10 만) 나는 다음과 같은 오류 얻을 때 :큰 입력에 대해 해제 된 개체의 체크섬이 잘못되었습니다.
#include <stdio.h>
long int merge(int *arr, const int start, const int half, const int end)
{
int s=start;
int i=0;
int cinv=0;
int j=half+1;
int* barr = new int[end+start-1];
while((s<=half)&&(j<=end)){
if(arr[s]<=arr[j]){
barr[i]=arr[s];
s++;
}
else{
barr[i]=arr[j];
j++;
cinv++;
}
i++;
}
if(s>half){
for(int k = j;k<=end;k++){
barr[i]=arr[k];
i++;
}
}
else{
for(int k=s;k<=half;k++){
barr[i]=arr[k];
i++;
}
}
for(int k=0;k<=end-start;k++) {
arr[k+start]=barr[k];
}
delete[] barr;
return cinv;
}
long int mergesort(int* arr, int start, int end){
int half=(start+end)/2;
long int cinv=0;
if (start<end){
cinv+=mergesort(arr, start, half);
cinv+=mergesort(arr, half+1, end);
cinv+=merge(arr, start, half, end);
return cinv;
}
return cinv;
}
int main(){
int len;
freopen("input.txt", "rt", stdin);
freopen("output.txt", "wt", stdout);
scanf("%d", &len);
int *arr= new int[len];
for (int i=0; i<len; i++){
scanf("%d", &arr[i]);
}
long int cinv=mergesort(arr, 0, len-1);
printf("\nInversions with merge=%ld", cinv);
delete [] arr;
return 0;
}
: 여기
incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug***
를 코드입니다
미리 도움을 주셔서 감사합니다.
이 코드는 절대적으로 C++가 아니기 때문에 'c'태그를 추가하는 것이 적절할 수도 있습니다. – Columbo
'main()'에서'barr' 배열의 점은 무엇입니까? 초기화하고 int를 할당 한 다음 다시는 아무 것도하지 않습니다. – Daniel
'병합'에서 보조 배열'barr'의 차원은'end - start + 1'이어야합니다. –