>

이 코드는 컴파일과 테스트를 통과했지만 HackerRank에 제출하려고 할 때 세그먼트 오류라고 말합니다.

// Sample code to perform I/O:
#include <iostream>
using namespace std;
int main() {
    int n;
    int i;
    int a[i];
    cin >> n;
    for(i=0;i<n;i++)
    {
        cin >> a[i];        //Reading Input to STDIN
    }
    for(i=n-1;i>=0;i--)
    {
       cout << a[i] << endl;        // Writing output to STDOUT 
    }
    return 0;
}

결과 : 런타임 오류-SIGSEGV


  • 답변 # 1

    i  이 초기화되지 않았으므로 정의되지 않은 동작이 있습니다. 초기화하기 전에 변수를 사용하지 마십시오.

    어레이 대신 벡터 사용 :

    #include <vector>
    int main() {
    int n;
    //int i; you don't need i anymore
    vector<int> a;
    cin >> n;
    a.reserve(n);
    for(int i=0;i<n;i++)
    {
        cin >> a[i];        //Reading Input to STDIN
    }
    
    
    int a[i]; 를 사용하여

     두 가지 문제가 있습니다 :

    i  컴파일 타임에 알아야합니다 (동적 화 할 수는 없습니다)

    배열 메모리에 배열을 저장하면 크기가 매우 커집니다. 제한적

    vector는 언제든지 배열의 크기를 조정할 수있는 컨테이너입니다. 그것 데이터 저장을 위해 힙 메모리를 사용합니다.

관련 자료

  • 이전 c# - 텍스트 파일을 작성하고 작성된 파일이있는 위치를 식별 할 수 없습니다
  • 다음 mysql - 같은 행의 ID를 기반으로 이름을 얻는 방법은 무엇입니까?