2010-12-27 4 views
0

포인터를 참조로 전달하는 데 문제가 있습니다. 포인터 참조를 사용하여 특정 배열 요소 전달

I는 메모리를 할당하고 필요한 값을 설정하는 방법

void set_range(double **measu) 
{ 
if ((*measu)[0] < 0) //or i is used for a loop 
    return ;   
} 


int main() 
{ 
    double *mes; 
    set_range(&mes[1]); 

} 

이다. 그러나이 프로그램은 나에게 "처리되지 않은 예외 액세스 위반 읽기 위치"오류를 제공합니다. 그럼 내 질문은 mes [0] (보통 (& mes)가 주어질 때 전달되는 mes [1] 대신에) 포인터를 set_range 메소드에 전달하는 것인가?

+1

오류가 좀 발생했습니다. 컴파일러 경고를 불러 일으켜야합니다. –

답변

1
이 대신 double**double*을 위해 기능을 변경

예 :

void set_range(double *measu) 
{ 
    if (*measu < 0) //or i is used for a loop 
    return; 
} 

int main() 
{ 
    double *mes; 
    ... 
    set_range(&mes[1]); 
} 

또는 대신 실제 참조 사용

void set_range(double &measu) 
{ 
    if (measu < 0) //or i is used for a loop 
    return; 
} 

int main() 
{ 
    double *mes; 
    ... 
    set_range(mes[1]); 
} 
+3

이 질문에 유래 stackoverflow.com 의해 질문 C++에 대한 참조가 없습니다. –

+0

C++로 변경되었습니다. 레미 내가 기대하고있다 (mes [0] 대신 mes [1]의 포인터를 전달하는 방법) – kaja

3

하나의 문제가 &mes[1] 유형 double *의 것을입니다, 기능에 대해 double **이 필요하지 않습니다.

또 다른 문제는 mes이 아무 것도 가리 키지 않는다는 것입니다. 초기화되지 않았습니다. 따라서 역 참조를하면 정크에 액세스하게됩니다 (이로 인해 액세스 위반이 발생합니다).

나는 명확히하는 데 도움이되는 몇 가지 코드를 제시하려고하지만, 솔직히 나는 당신이 무엇을하려고하는지 전혀 모릅니다. 좀 더 많은 코드는 목표가 무엇인지 알아내는 데 도움이되지만 위의 내용을 통해 왜 double **이 필요한지 또는 동적 메모리가 필요한지 double 변수가 필요한지 알 수 없습니다.