2014-06-20 3 views
0

이게 내 첫 번째 게시물이고 내 이론적 인 데이터 구조 클래스에 대한 숙제를위한 것입니다. 내가 묻는 질문은 과제가 별개가 아니라 가능하다면 코드를 깨끗하게 만들 것이다. (이 문제의 경우 할당은 연결리스트 스택을 사용하여 역 폴란드 표기법 계산기를 확인하는 것입니다.)포인터를 반환 한 후 즉시 해제하는 방법?

는 내가하고 싶은 것은이

char* postEval(char* equation) 
{ 
    char* curChar = equation; 
    struct stackNode* stack = NULL; 

     /*Alot of processing (hint: stack gets initialized during this)*/ 

     /****Is there a way to free the node after returning it?? -- 
      this is pseudo-code!*****/ 
     return FreeThenReturn(stack->data); 
} 

이다 나는 내가 할 수있는 알고 sprintf() 또는 strcpy()을로 임시 변수 그래서 노드를 무료로 되돌릴 수있는 varaible 온도를 반환하지만, 거기에 더 좋은 방법은 무엇입니까 ??

EDIT : 명확하지 않은 내용이지만 '데이터'멤버 (char *)의 복사본을 호출 함수로 반환하려고합니다. 이것은 스택의 메모리를 해제하고 거기에 저장된 데이터의 복사본을 보내야하기 때문에 문제가됩니다. 이런 식으로하는 것이 이상하게 보일 수도 있지만 선생님이 그렇게하도록 특별히 말씀하신 방법입니다. struct stackNode 정의 나 postEval()의 프로토 타입을 전혀 편집 할 수 없습니다.

struct stackNode 
    { 
      char* data; 
      struct stackNode *next; 
    } 

또한, 함수 postEval()는 기본적으로는 변수 '수학'의 각각의 문자를 분석하고 식은 다음과 같이 응답을 반환 해결 스위치 문 단지 루프 다음과 같이 구조체 stackNode 정의는 숯*. 선생님은 스택을 사용하여 문제를 해결할 수 있는지보고 싶어합니다. 바로 그 점입니다. 이런 식으로하지 않는 것이 더 쉽다는 것을 알고 있지만, 과제를하지는 않았습니다.

+4

그것은 당신이 요구하는지 완전히 불분명! 의미 론적으로 (왜 그렇게하고 싶습니까?), 불충분 한 코드 예제 ([MCVE] (http://stackoverflow.com/help/mcve))를 제공하십시오. –

+0

'sprintf'와'strcpy'에 관해서는 포인터가 무엇인지 이해하지 못한다는 것을 암시합니다. 이걸 제대로 생각해 봤어? – Nobilis

+2

노드를 반환 한 후 해제 하시겠습니까? 정확히 언제? 확실히 반환하는 코드가 먼저 필요합니다. –

답변

0

데이터 포인터를 안전하게 보호하고 stackNode 함수를 해제 할 수 있습니다.

stackNode 
[ 
    Data pointer -----> [data] 
] 

savePointer ----> [data] 

무료 stackNode는

return savePointer 
3

난 당신이 아마이의 라인을 따라 뭔가 할 필요가 있다고 생각 데이터 exept 모든 것을 삭제합니다 :

Data *data = stack->data; // or whatever type stack->data is 
free(stack); 
return data; 

을하지만 난 그 의견에 동의 질문이 명확하지 않습니다.

무료로하고 싶은 물건과 돌아오고 싶은 물건이 똑같습니다 (이 경우 계획에 결함이 있습니다 - 발신자가 사용할 수 없기 때문에 이미 해제 된 것을 돌려 보내는 용도는 없습니다) , 그렇지 않으면 그것들은 다르다. (어떤 경우 든 당신은 그것들을 어떻게 든 분리해야만한다. 그러나 당신이 그들에 대해 충분히 말하지 않았기 때문에 우리는 정확히 어떻게 말할 수는 없다.)

0

auto_ptr/unique_ptr (C++ 11)을 반환 할 수 없습니까? 뭔가 같은 :

unique_ptr<stackNode> postEval(char* equation) { unique_ptr<stackNode> stack; ..... return stack; }

관련 문제