2014-12-17 3 views
0

이 코드를 가지고 내가 int i; 같은 몇 가지 변수를 선언하면 저작자에게는 segfault의 첫 번째 속성 (C에서 클래스 ++)

#include <iostream> 

using namespace std; 

template <class type, int linha, int coluna> 
class MetodoNw{ 

    private: 
     type metodoNw[linha][coluna]; 
     int match, missmatch, gap; 

    public: 
     MetodoNw(); 
}; 

template <class type, int linha, int coluna> 
MetodoNw <type,linha,coluna> :: MetodoNw(){ 
    match = 5; 
    missmatch = -3; 
    gap = -4; 
} 

int main(){ 
    cout << "######" << endl; 
    MetodoNw<int,2000,2000> metodo1; 
    return 0; 
} 

을 수행 할 첫 번째 시도에서 세그먼트 폴트가 계속에, 그것은 잘 작동합니다. 내가 int i=0;과 같은 것을 가지고 있다면 segfault를 얻습니다. cout, printf 및 다른 함수와 동일합니다. 나는 단지 무엇을 해야할지 모르겠다 ... 튜토리얼, 책, gdb를 시도했지만 아무 것도 얻지 못했다.
참고 : 이것은 코드 조각 일 뿐이므로 아무 것도하지 않습니다.

+2

유래의 할당 힙에 배열 (또는 더 나은 아직은'표준 :: 벡터'를 사용). – Borgleader

+2

스택 오버플로가 발생했을 수 있습니다. 스택에'int [2000] [2000]'을 할당하려고하는데 ~ 16MB의 공간이 필요할 것입니다. 대부분의 스택은 그렇게 크지 않습니다. – Cornstalks

+0

야생 포인터 및 정의되지 않은 포인터로 인해 segfault가 발생합니다. - http://en.wikipedia.org/wiki/Segmentation_fault?scrlybrkr –

답변

2

는 segfault 때문에 크기의 큰 배열에 아마 2000x2000

나는 다음과 같은 std::vector을 사용하는 것이 좋습니다 : 좋아

std::vector< std::vector<type> > metodoNw ; 

및 초기화 :

template <class type, int linha, int coluna> 
MetodoNw <type,linha,coluna> :: MetodoNw(): 
    metodoNw(linha, std::vector<type>(coluna)){ 
    match = 5; 
    missmatch = -3; 
    gap = -4; 

} 
관련 문제