2014-02-15 3 views
0

저는 포럼과 서적을 읽음으로써 C++을 배우기 때문에 프로그래머의 세계에 익숙하지 않습니다. 나는 배우려고 열망하므로 제발 내 코드를 개선하는 것을 망설이지 말라!C++에서 전달 된 구조체 배열에 액세스

함수에 전달한 구조체 배열에 액세스하는 데 문제가 있습니다. 데이터가 저장되지 또는 내가 엉뚱한 곳에서 찾고 있어요 중 하나가이기 때문에 액세스 위반을 얻을

struct Comber 
{ double real; 
    double im; 
    double mod; 
}; 


int main (void) 
{ 
struct Comber *Nmbr=NULL; //Nmbr Initialised for passing to Read where it's re-declared 
int N; 
Read(Nmbr, N); 
Module(Nmbr, N); 
} 



void Read (Comber *Nmbr, int &N) 
{ 

    cout<<"\nHow many of those numbers do you have ?\t"; 
    cin>>N; 
    Nmbr = new struct Comber [N]; 

    for(int i=0;i<=N;i++) 
    { 
     cout<<"#"<<i<<"\nreal :\t"; 
     cin>>Nmbr[i].real; 
     cout<<"img :\t"; 
     cin>>Nmbr[i].im; 
     cout<<"-----"<<endl; 
    } 
} 



void Module (Comber *Nmbr, const int &N) 
{ 
    for(int i=0;i<N;i++) 
    { 
      //Here's where my problem is at. 
     Nmbr[i].mod=sqrt(pow(Nmbr[i].real,2)+pow(Nmbr[i].im,2)); 
    } 
} 

: 다음은 내 코드입니다. (맞습니까?) 그래서 실수가 읽기 또는 모듈에 있는지, 실제로 무엇인지 궁금합니다.

감사합니다.

+1

관련이 없지만 실제로는 참조로 'N'을 전달해야합니다. 이것은 마치 C 코드처럼 쓰여졌습니다. – Brian

+1

조언 해 주셔서 감사합니다. 그냥 그것이 의미하는 것을 훑어 보았고 그것은 실제로 더 단순하고 더 잘 쓰여졌을 것입니다. – Moontail

답변

2

Nmbr 포인터의 값을 변경하려면 값이 아닌 참조 또는 포인터로 값을 전달해야합니다. 이처럼 다음 main의 코드 Nmbr

void Read (Comber *&Nmbr, int *N) 

은 chaged되지 않습니다.

+0

아, 정말 고마워. 농담 아냐. ^^ 그것이 실제로 어떻게 작동하는지 설명해 주시겠습니까? 배열의 주소를 덮어 쓰거나 또는 무엇을 덮어 썼습니까? – Moontail

+0

@Moontail : 'new'를 통해 생성 한 구조체는 'Module()'에 로컬 인 'Nmbr'변수에만 저장되어 있으므로 배열에 저장되지 않았습니다. 더 나은 이해를 얻으려면 http://pw1.netcom.com/~tjensen/ptr/pointers.htm을보십시오 :) – vines