2011-05-02 2 views
-1

나는 역 전파 알고리즘을 사용하여 입력을 전달하기 위해 다음 코드를 작성했지만 입력이 두 개인 경우 세그먼트 표시 오류가 발생했습니다. 오류 코드가 있습니다. .I은신경망의 분할 오류

void propagateInput(int cur,int next) 
{ 
    cout<<"propagating input"<<cur<<" "<<next<<endl; 
    cout<<"Number of nerons : "<<neuronsInLayer[cur]<<" "<<neuronsInLayer[next]<<endl; 
    for(int i = 0;i < neuronsInLayer[next];i++) 
    { 
     neuron[next][i].output = 0; 
     for(int j = 0;j < neuronsInLayer[cur];j++) 
     { 
      cout<<neuron[cur][j].output<<" "; 
      cout<<neuron[next][i].weight[j]<<"\n"; 
      neuron[next][i].output += neuron[next][i].weight[j] * neuron[cur][j].output; 
     } 
     cout<<"out["<<i<<"] = "<<neuron[next][i].output<<endl; 
    } 
    cout<<"completed propagating input.\n"; 
} 
+0

반복하는 배열의 할당에 대한 자세한 내용을 추가하십시오. 또한 특별히 세분화 오류를 일으킨 작업을 알려줍니다. 디버거를 사용 했습니까? – moooeeeep

답변

0
for(int i = 0;i < neuronsInLayer[next];i++)... 

neuronsInLayer [다음] 포인터입니다 .... 그것을 알아낼 수 없습니다 완. 아마도 내가 뉴런의 유형을 알고 있다면 층입니다. 나는 당신을 더 도울 수 있습니다.

+1

"포인터입니다"라는 것을 어떻게 아십니까? – cnicutar

+0

int * neuronsInLayer; –

+0

@soma sekhar - 'neuronsInLayer'가 유효한 메모리 위치를 가리 킵니까? 'next'를 가리킬 수있는 인덱스가 있습니까? – Mahesh

0

코드를 디버깅 할 수있는 충분한 정보가 부족하지 않습니다. 줄 번호 나 구조가 메모리에 어떻게 배치되어 있는지, 어떤 것이 유효한지 등에 대한 정보는 없습니다.

그래서 직접 어떻게 찾을 수 있는지 알려 드리겠습니다. 단지 디버그 모드에서 실행뿐만 아니라

$ gdb a.out 
> run 
*segfault* 
> where 

비주얼 스튜디오는 훌륭한 디버거를 가지고 있으며, 그것은 당신을 말할 것이다 : 당신이 유닉스/Mac을 사용하는 경우의 a.out, 실행 파일에 GDB 디버거를 사용 segfault가 있고 당신이 기억을 검사하게합니다.