2017-12-29 25 views
-3

이것은 쉽게 해결할 수 있습니다. 내가 뭘 잘못하고 있는지 잘 모르겠다.이 슈퍼 코드로 도울 수있다.배열을 채울 때 세그먼트 화 오류가 발생했습니다.

이 프로그램을 실행하면 배열의 5 개 값이 출력되고 세그먼트 오류가 발생합니다. 이 문제를 어떻게 해결할 지 잘 모르겠다. 도움이된다면 고맙습니다.

+0

'arraysize'는 배열'a [arraysize]'를 선언 할 때 가비지 값을 유지합니다. –

+0

GCC와 함께 [http://coliru.stacked-crooked.com/a/301743aa2694a77a]를 재생산 할 수 없습니다. VLA를 사용하지 말고 VLA를 사용하기 전에 변수를 초기화하십시오. – Ron

+0

@AditiRawat에 따르면,'arraysize'는 쓰레기가 처음 사용 된 지점에서 쓰레기를 저장합니다. 게다가'int a [arraysize]'는'arraysize'에 유효한 값이 있어도 C++이 유효하지 않습니다. 일부 컴파일러는 이것을 확장 기능으로 허용하지만 최소한 여러분이하고있는 일은 정결하지 않다는 경고를 주어야합니다. –

답변

3

arraysizea이 구성 될 때 지정 값이 없습니다. 즉, a 크기를 지정하는 데 정의되지 않은 동작이 호출되었습니다.

#include <iostream> 

//Don't use "using namespace std;"! 
//using namespace std; 

int main() 
{ 
    //removed unused/unnecessary variables 
    int arraysize; 

    std::cout << "array size"; 
     std::cin >> arraysize; 

    int a[arraysize]; 

    for(int i = 0; i < arraysize; i++) { 
     int j = arraysize - i; 
     a[i] = j; 
     std::cout << "a[" << i << "] = " << a[i] << std::endl; 
    } 
} 

그러나이 :

이 코드의 비 정의되지 않은 동작 버전이 있습니다. 이와 같이 런타임에 배열 크기를 지정하는 것은 언어에 대한 비표준 확장이며 모든 환경에서 작동하지 않을 수도 있습니다. 이 코드가 표준을 따르도록하려면 std::vector을 사용해야합니다.

#include <iostream> 
#include <vector> 

int main() 
{ 
    int arraysize; 

    std::cout << "array size"; 
     std::cin >> arraysize; 

    std::vector<int> a(arraysize); 

    for(int i = 0; i < arraysize; i++) { 
     int j = arraysize - i; 
     a[i] = j; 
     std::cout << "a[" << i << "] = " << a[i] << std::endl; 
    } 
} 

난 당신의 코드, for these reasons에서 using namespace std;의 사용을 제거했습니다.

+0

솔직히 도움을 주셨습니다. 정말 고마워요. – theninja1011

0

이것은 분명히 정의되지 않은 동작입니다.
우선 C++ 표준은 가변 길이 배열을 지원하지 않습니다. 이것은 gcc와 같은 일부 컴파일러의 확장입니다.

배열을 인스턴스화 할 때 arraysize의 두 번째 값은 정의되지 않으므로 결과가 예측할 수 없기 때문에 일부 경우에는 작동하지만 이는 순수한 행운을 기반으로합니다.

동적 크기 배열이 필요한 경우 std::vector을 사용하는 것이 가장 좋습니다.

#include <iostream> 

using namespace std; 

int main() 
{ 
    int arraysize, i, n, j; 
    std::vector<int> a; 

    cout << "array size"; 
    cin >> arraysize; 

    std::vector<int> a(arraysize); 

    for(int i=0, j = arraysize; i < arraysize, j > 0; i++, j--){ 
     a[i] = j; 
     cout << "a[" << i << "] = " << a[i] << endl; 
    } 

    return 0; 
}