stackoverflow에서이 오류와 관련된 몇 가지 질문이 있으며 배열에 의한 과도한 메모리 사용과 관련되거나 포인터를 사용할 때 이해합니다.)하지만 작은 배열을 사용하면 여전히이 오류가 표시됩니다. 이전의 동일한 코드가 잘 실행되고있었습니다 (배열 병합 병합).세그먼트 오류 : 배열/벡터에 대한 작은 입력에 11
5
9 8 1 2 4
출력 :
,369 다음분할 고장 11
내 입력했다
#include<iostream>
#include<vector>
using namespace std;
void merge(vector <int> ar, int l, int m, int r){
int n1 = m-l+1;
int n2 = r-m;
int L[n1];
int R[n2];
for (int i = 0; i < n1; ++i)
{
L[i]=ar[l+i];
}
for (int j = 0; j < n2; ++j)
{
R[j]=ar[m+j+1];
}
int i,j;
i = j = 0;
int k = i;
while(i<n1 && j<n2){
if (L[i]<R[j])
{
ar[k]=L[i];
i++;
}
else if (R[j]<L[i])
{
ar[k]=R[j];
j++;
}
k++;
}
while(i<n1){
ar[k]=L[i];
i++;
k++;
}
while(j<n2){
ar[k]=R[j];
j++;
k++;
}
}
void mergesort(vector <int> ar, int l, int r){
int m;
m=r+(l-r)/2;
if (l<r)
{
mergesort(ar, l, m);
mergesort(ar, m+1, r);
merge(ar, l, m, r);
}
}
void print(vector <int> ar, int size){
for (int i = 0; i < size; ++i)
{
cout<<ar[i]<< " ";
}
}
int main()
{
int n;
cin>>n;
vector <int> ar;
for (int i = 0; i < n; ++i)
{
cin>>ar[i];
}
print(ar,n);
mergesort(ar, 0, n-1);
print(ar, n);
return 0;
}
당신이 디버거를 통해이를 실행 한 :
l
및r
한 차이가 어디과 같이, 지점에 도착하면 또는, 당신은 단지 두 요소를 교환 할 수 있습니까? –'int ar [n];'은 비표준 C++이므로 컴파일러가 허용하고 작업 할 수 있다고하더라도 실제로 사용하면 안됩니다. 또한 여기에 코드를 게시하려면 변수를 더 잘 지정해야합니다. – Xirema
예, 디버거를 통해 실행했습니다. 더 나은 변수 이름으로 벡터를 재 게시하고 @Xirema를 –