[질문] 포인터...
글쓴이: bosub / 작성시간: 화, 2006/01/24 - 3:41오후
라이브러리에서 다음과 같이 선언이 되었습니다.
Typedef xmlDoc *xmlDocPtr
메인 소스에서
void function(xmlDocPtr doc)
{
..... doc의 값 설정
printing(doc); // 정상적으로 출력
}
void main(void)
{
xmlDocPtr doc;
function(doc);
// doc == NULL 로 됨
}
메인에서 호출한 함수에서 doc의 값을 설정되고 그 설정된 값이
메인에서도 유효하게 할려면 어떻게 호출해야 하나요?
Forums:


function 안에서 xmlDocPtr 에 뭔가를 할당한 다음fun
function 안에서 xmlDocPtr 에 뭔가를 할당한 다음
function 바깥에서 쓰고 싶다는 것인가요???
그런 경우 function 을
void function(xmlDocPtr * doc) { ..... doc의 값 설정 printing( &doc); // 정상적으로 출력 }이렇게 바꾸고 main 에서
void main(void) { xmlDocPtr doc; function( &doc); // doc == NULL 로 됨 }이렇게 하면 될겁니다.
수정해서 돌려 봤는데 안되네요. 전역변수로 빼서 돌리면 가능한데 가능하면
수정해서 돌려 봤는데 안되네요. 전역변수로 빼서 돌리면 가능한데 가능하면 전역으로 돌리기 싫은데 ㅠㅠ
5초 앞이라도 내다 볼 수 있다면..
[code:1]void function(xmlDocPtr *d
void function(xmlDocPtr *doc) { .... // *doc의 값 설정 printing(*doc); // 정상적으로 출력 } void main(void) { xmlDocPtr doc; function(&doc); ... }---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
제가 궁금한거는 라이브러리에서 xmlDocPtr이 xmlDoc의 포인터
제가 궁금한거는 라이브러리에서 xmlDocPtr이 xmlDoc의 포인터로 선언이 된 것을 메임함수에서 선언을 해서 사용하는데
로컬 함수로 호출을 할때 이 함수가 가지는 포인터의 관계가 궁금합니다.
위와 같이 해도 로컬 함수에서는 값을 가지지만 메인함수로 돌아오면
doc 값이 NULL이 되버리니.. ㅠㅠ
실력이 부족해서 포인터의 개념이 부족하네욤 ㅠㅠ
5초 앞이라도 내다 볼 수 있다면..
[quote="bosub"]제가 궁금한거는 라이브러리에서 xmlDocP
혹시 xmlDoc 가 interface 인지 확인해 보세요. 이 경우 smart pointer 사용한 경우 메인에서 파괴되는 현상이 reference count 감소에 의한 것으로 설명이 됩니다. 물론 이 경우 main()에서는 해당 개체를 참조(또는 사용)하는 동안은 파괴되지 않을 테니 문제될 건 없을텐데...음, 혹시 NULL이 되는 것만 확인하고 질문을 하신 건 아닌지...
void main(void) { xmlDocPtr doc; function(doc); // 여기서는 doc != NULL 이므로 printing()이 호출돼야 함. if (doc != NULL) printing(doc); // 이제는 doc == NULL 이 맞음! return; }===========================================================================
Shocky Han
BIM Consultant, Certified Information Systems Auditor
Seoul, Korea.
===========================================================================
Re: [질문] 포인터...
void function(xmlDocPtr doc) { ..... doc의 값 설정 printing(doc); // 정상적으로 출력 } void main(void) { xmlDocPtr doc; function(doc); // doc == NULL 로 됨 }xmlDocPtr 를 int라고 가정한다면 위의 소스는
void function(int doc) { ..... doc의 값 설정 printing(doc); // 정상적으로 출력 } void main(void) { int doc; function(doc); // doc == NULL 로 됨 }위의 소스를 보면 결과값이 결코 반환 될수 없다는걸 아실겁니다.
아래와 같이 int * 로 바꿔야 반환값을 가져올수 있겠죠?
그리고 int를 xmlDocPtr로 치환해서 봐보세요.^^
void function(int * doc) { ..... doc의 값 설정 printing(*doc); // 정상적으로 출력 } void main(void) { int * doc; function(doc); // doc == NULL 로 됨 }전 모든형의 int형화 시켜 본답니다.^^
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
[code:1]void function(xmlDocPtr* ppd
void function(xmlDocPtr* ppdoc) { //..... *ppdoc의 값 설정 // *ppdoc = xmlParseFile(..............);???? 생성??? printing(*ppdoc); // xmlFreeDoc(*ppdoc); ?????????? 혹시 해제를...??? } void main(void) { xmlDocPtr pdoc; function(&pdoc); // ... }doc을 어디서 생성하느냐와 어디서 해제하는냐를 주의해서 살펴보시면 되지 않을까요???
-----------------------
좋은거 함 만들어보자...^^
댓글 달기