2014-11-01 2 views
0

배열 전달 c. Get_Present_Location() 함수에서 배열을 정의하고 포인터를 단순히 main으로 포인터를 전달합니다. 그것은 마지막 요소를 제외하고는 작동하는 것 같습니다. -7 대신에 나는 0을 얻습니다. 아마도 내 부분에 어리석은 실수가 있지만 그 이유를 이해할 수 없습니다.배열 패킹 C

#include <stdio.h> 
#include <stdlib.h> 

double *Get_Present_Location(); 

int main(){ 

    double *Present_Point; 
    Present_Point=Get_Present_Location(); 

    for (int i=0;i<6;i++) 
    { 
     printf("Joint[%d] = %f\n",i+1,Present_Point[i]); 
    } 

    return 0; 
} 

double *Get_Present_Location() 
{ 

    double point[6]={4,1,5,-3,5,-7}; //Temporary 

    return &point; 
} 

답변

3

고객님의 질문에 답변하셨습니다.

double point[6]={4,1,5,-3,5,-7}; //Temporary 

당신이 신비한 것들의 모든 방법이 발생할 수 있습니다 유효하지 않은 포인터를 일단 C에서

0

(또한 코드에 대한 경고와 함께 컴파일되지 않습니다) 일시적입니다. 여기에 두 가지 문제가 있습니다.

return &point; 

이 먼저 포인터로, 두 번이 ** 포인터를 반환, 당신이해야 대신

return point; 

배열 자체가 효과적으로 두 배로 포인터입니다.

중요한 점은 임시 또는 로컬 저장소에 포인터를 반환한다는 것입니다. 함수에서 돌아 왔을 때 스택에있는이 메모리는 다음 함수 호출에서 재사용을 위해 열려 있습니다. 당신은 임의의 변경에 영향을받는 스택 위치에 대한 포인터를 사실상의 쓰레기로 반환하고있다.

대신 약간의 메모리를 할당하고 포인터를 반환해야합니다.