我不输出变量时代码中断;我这样做的时候很有效武汉理工大学?

时间:2011-04-21 21:31:42

标签: c++

我真的不知道还有什么可说的。

我从来没有见过这种情况。而这只是让我感到困惑的原因。我想你们之前可能已经看过这个,现在我正在做些什么傻事。

关于它的注释:'temp'是函数所采用的变量。它是二叉树节点(BTN)。 temp-> d访问数据。 - > l是孩子, - > 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);
          }
        }
  }
}

3 个答案:

答案 0 :(得分:6)

您没有为nTemp分配任何内容。它指的是垃圾。

当您在中断的行上访问它时,会发生未定义的行为。如果你很幸运,你应该获得访问冲突/段错误。如果你不幸运,它会默默地“工作”,但可能会给你错误的结果。

您需要为其指定现有BIN<Generic>的指针或创建一个新指针。

答案 1 :(得分:0)

确保nTemp已初始化。我打赌不是。 cout会在nTemp中放置“良性”的东西。

答案 2 :(得分:0)

nTemp未分配任何空间,因此您正在写入随机存储器。