그래서 코드 시작 부분에 세그먼트 오류 오류가 나타납니다. 다른 지점에서 몇 가지 테스트를 실행 해봤는데 오류가 배열에 대한 메모리를 할당 할 때 것 같습니다. Ive는 힙과 스택 메모리에 대해 배우기 시작했기 때문에 내가 뭔가 잘못하고 있는지 확실하지 않습니다. 어떤 도움을 주시면 감사하겠습니다.세그먼트 오류 오류 11 C++
#include <iostream>
using namespace std;
//Function Prototypes
void sort(int A[], int n);
int findMin(int A[], int n, int j);
int swap(int& a, int& b);
double median(int A[], int n);
void output1(int median);
void output2(double median);
int main()
{
int size;
int array[size]; //Segmentaion fault here
int i = 0;
cout << "Enter the size of the list (< 1 to quit): ";
cin >> size;
while(size >= 1)
{
double element;
cout << "Enter element " << i+1 << ": ";
cin >> element;
array[i] = element;
i++;
while(i < size)
{
cout << "Enter element " << i+1 << ": ";
cin >> element;
array[i] = element;
i++;
}
sort(array, size);
median(array, size);
cout << "Enter the size of the list (< 1 to quit): ";
cin >> size;
}
delete [] array;
return 0;
}
void sort(int A[], int n)
{
int min;
for(int i = 0; i < n; i++)
{
min = findMin(A,n,i);
//min = findMinIndex(p, size, i);
//if(min)
swap(A[i],A[min]);
//swap(p[i],p[min]);
}
}
int findMin(int A[], int n, int j)
{
int minIndex = j;
for(int i = j+1; i < n; i++)
if(A[i]<A[minIndex])
minIndex = i;
return minIndex;
}
int swap(int& a, int& b)
{
int temp;
temp = a;
a = b;
b = temp;
}
void output1(int median)
{
cout << "The median is " << median << "." << endl;
}
void output2(double median)
{
cout << "The median is " << median << "." << endl;
}
double median(int A[], int n)
{
if(n % 2 == 0)
{
int div1 = n/2;
int num1 = A[div1];
int num2 = A[div1 -1];
double median = (num1 + num2)/2;
output2(median);
}
else
{
int div2 = n - 1;
int median = div2/2;
output1(median);
}
}
이렇게 디버거를 사용하면 세그 폴트가 * 정확히 * 발생합니까? –
비 동적 배열의 크기는 컴파일시 알려진 고정 크기 여야합니다. 'int size; int 배열 [크기];'불법입니다 C++. 게다가'size'가 초기화되지 않았기 때문에 segfault를 얻습니다. – DeiDei
GCC 나 Clang과 같이 이것을 허용하는 컴파일러라도 비표준 확장자를 사용하고 있습니다. 가변 길이 배열은 C 표준의 (현재는 선택 사항이지만) 믿을만한 부분이지만 C++ 표준에 전혀 포함되어 있지 않습니다. –