2012-10-23 3 views
0

가능한 중복 :동적 매트릭스 및 C++ : 분할 오류

unsigned N = 1000; 
vector<vector<double> > Matrix; 

for (unsigned i=0; i<(N-1); ++i) { 
    for (unsigned j=0; j<(N-1); ++j) { 

     if ((i>(N/4-1) && i<(3*N/4-1)) || (j>(N/4-1) && j<(3*N/4-1))) 
      Matrix[i][j] = 1; 

     else if (i==0 || i==(N-1) || j==0 || j==(N-1)) 
      Matrix[i][j] = 0; 
} 
} 
: I 동적 행렬에 어떤 값을 할당 ++ C의 간단한 코드를 생성

Matrix Arithmetic using Vectors in C++ causing segmentation faults

컴파일러는 문제를 반환하지 않지만 프로그램을 실행하려고하면 Segmentation Fault를 반환합니다. 내 실수는 어디 갔지?

감사합니다.

+0

매트릭스의 크기를 설정하십시오. – elyashiv

답변

1

두 개의 빈 벡터를 만들고 방금 operator[]을 사용하는 것은 정의되지 않은 동작입니다. 그러한 것이 가능하다면 그것들은 크기가 0 인 배열과 같습니다.

귀하는 용량 벡터를 만들 수 있고, 각 요소는 기본적으로 초기화하여 0이 될 것이다

vector<vector<double>> Matrix(N, vector<double>(N)); 

첫번째 인수가 외부 vector의 크기이며, 두 번째 행의 값 그 자체로 N의 벡터 인 각 요소에 복사하십시오.

0

나열된 코드가 문제를 일으키는 정확한 코드 인 경우 문제는 실제로 "매트릭스"크기를 지정하지 않은 것입니다.

vector<vector<double> > Matrix (N, vector<double>(N)); 

이렇게하면됩니다.

나중에 segfaults를 디버깅하려면 최적화 및 디버그 기호를 사용하지 않고 컴파일 한 다음 디버거 (예 : gdb)에서 실행하고 sefault 이후에 다시 추적하여 시작할 수 있습니다. 백 트레이스는 도움을 청할 때도 유용합니다.