2011-04-21 3 views
1

나는 이것에 관해 더 말할 것이 무엇인지 정말로 모른다.변수를 출력하지 않으면 코드가 손상됩니다. 할 때 작동합니다. 왜?

나는 결코 이런 일이 일어나는 것을 보지 못했습니다. 그리고 그것은 단지 원인을 일으키는 원인이됩니다. 나는 너희들이 전에 이것을 보았을지도 모르고, 내가 지금하고있는 어리석은 일을 생각했다.

참고 사항 : 'temp'는 함수가 가져 오는 변수이며 이진 트리 노드 (BTN)입니다. temp-> d는 데이터에 액세스합니다. -> 나는 왼쪽 자식이다. -> r은 오른쪽 자식이다. -> p는 부모입니다

참고 :이 내용은 숙제입니다. 우선 순위 큐에 대한 것입니다.

참고 2 : 비슷한 질문을 보았습니다. 모두 타이밍 오류를 제안했으며 'cout'은 코드를 느려지 게합니다. 이게 뭐야? 내가하고있는 어떤 '비용이 많이 드는'것을 생각할 수 없다.

BTN<generic>* nTemp; 
    cout << "Sdf\n"; 
    if(temp->r != NULL) 
    { 
    if(temp->l != NULL) 
     { 
      if(*(temp->r->d) > *(temp->l->d)) 
      { 
      if(*(temp->r->d) > *(temp->d)) 
       { 
        cout << "ASDfs5: " << *(temp->d) << "\n"; //THIS IS WHAT KEEPS IT FROM BREAKING/SEGFAULTING 
        nTemp->d = temp->d; //THIS IS WHERE IT BREAKS (SEGFAULT) 
        cout << "ASDfs\n"; 
        temp->d = temp->r->d; 
        cout << "ASDfs4\n"; 
        temp->r->d = nTemp->d; 
          cout << "ASDfs3\n"; 
        if(temp->r != NULL) 
        { 
        checkPopValues(temp->r); 
          cout << "ASDfs2\n"; 
        } 
       } 
      } 
      else 
      { 
      if(*(temp->l->d) > *(temp->d)) 
       { 
        nTemp->d = temp->d; 
        temp->d = temp->l->d; 
        temp->l->d = nTemp->d; 
        checkPopValues(temp->l); 
       } 
      } 
     } 
     else 
     { 
      if(*(temp->r->d) > *(temp->d)) 
      { 
      nTemp->d = temp->d; 
       temp->d = temp->r->d; 
       temp->r->d = nTemp->d; 
       checkPopValues(temp->r); 
      } 
     } 
    } 
    else 
    { 
    cout << "sdfs\n"; 
    if(temp->l != NULL) 
     { 
      if(*(temp->l->d) > *(temp->d)) 
     { 
      nTemp->d = temp->d; 
       temp->d = temp->l->d; 
       temp->l->d = nTemp->d; 
       checkPopValues(temp->l); 
      } 
     } 
    } 
} 
+0

얼마나 많은 스레드가 생성되며 '휴식'이란 무엇입니까? '휴식'이라고 말하면 도움이되지 않습니다. 구체적인 오류나 설명이 필요합니다. –

+0

It SegFaults입니다. 죄송합니다. 과제에 익숙한 사람들의 질문에 너무 익숙합니다. – Madeline

답변

0

nTemp가 초기화되었는지 확인하십시오. 나는 그렇지 않다고 생각한다. 코우 아웃 (cout)은 nTemp에 "양성 (양성)"현상을 유발합니다.

+1

나는 내기를하지 않을 것이다. 초기화되지 않았 음을 알 수 있습니다. –

+0

그것은 효과가있다. 나는 처음에 nTemp-> d를 초기화하려고 시도했지만 모두 미쳤다. 그러나, 그것은 지금 일한다! – Madeline

6

nTemp에 아무 것도 지정하지 않았습니다. 쓰레기를 가리키고 있습니다.

줄 바꿈에 액세스하면 정의되지 않은 동작이 발생합니다. 운이 좋으면 액세스 위반/세그먼트를 받아야합니다. 운이 좋지 않으면 조용히 '일'하지만 잘못된 결과를 줄 것입니다.

기존 BIN<Generic>에 대한 포인터를 지정하거나 새 포인터를 만들어야합니다.

0

nTemp에는 임의의 메모리에 쓰는 공간이 할당되지 않습니다.

관련 문제