c++ - 当我不输出变量时代码中断;当我这样做的时候工作。什么?

标签 c++

关于这个我真的不知道该说什么了。

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

注意事项:'temp' 是函数接收的变量。它是一个二叉树节点 (BTN)。 temp->d 访问数据。 ->l 是左 child ,->r 是右 child 。 ->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);
          }
        }
  }
}

最佳答案

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

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

您需要分配一个指向现有 BIN<Generic> 的指针到它或创建一个新的。

关于c++ - 当我不输出变量时代码中断;当我这样做的时候工作。什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5750005/

相关文章:

c++ - Windows 过滤平台错误

C++ 猜谜游戏 : unable to get midpoint properly

c++ - 你如何使用 libcurl 获取网站的输出?

c++ - 如何手动输入数据矩阵?

C++ 设计 : single function performing multiple tasks vs multiple functions performing single task

c++ - c++ 中新分配的 int 的内存大小,有没有更好的不同方式来查看它?

c++ - 遍历对列表的 vector

c++ - opencv卡尔曼滤波多目标跟踪误差

c++ - 派生类映射

c++ - MFC 有回车键作为 "apply"按钮