【问题标题】:'main' has stopped working - C++ [dev++]'main' 已停止工作 - C++ [dev c++]
【发布时间】:2017-12-19 21:48:40
【问题描述】:

我的代码表现得很奇怪。它有时会工作,有时会崩溃。

当它崩溃时会说:

一个问题导致程序停止正常工作

我的main

int main() {
    start();
    Read();

    cout << "Enter the code of the course: ";
    cin >> coursecode;
    cout << "\n1111111\n";
    searchCourse(coursecode);
    cout << "\n222222\n";

    return 0;
}

我在 searchCourse 函数的上方和下方写了两个 couts 来查看程序是否编译了所有行。它确实编译了所有内容,最后它在崩溃之前打印 222222。

start 方法只是创建一个 BinaryTree 对象数组,然后存储 学生数据(从文本文件中读取)根据他们的课程。

开始():

BinaryTree *a[10];

void start()
{
    for(int g=1;g<=10;g++)
    {
        a[g] = new BinaryTree(g);
    }
}

搜索课程():

void searchCourse(string code)
{
    for(int j=1;j<=count;j++)
    {
        if(a[j]->checkit(code)!=0)
        {
            a[j]->display();

            break;
        }
    }
}

BinaryTree.h 中的 Checkit():

bool checkit(string m)
{
    if (root==NULL)
        return false;
    else
        if(root->data.getCourse()==m)
            return true;
        else
            return false;
}

【问题讨论】:

  • 数组从 C++ 中的索引 0 开始,而不是 1。我建议阅读一些 C++ 书籍,但您正在编写的程序表明您应该已经知道这样的基本知识.
  • @PaulMcKenzie 我记得我们的老师从 1 开始数组。特别是在堆概念中。我不知道它是否有特殊情况,在这种情况下从 1 开始可能会更好,但我认为这样做不会造成很大的麻烦。谢谢回复
  • @ibrahim 那位老师应该被解雇。
  • 我记得我们的老师从 1 开始数组。特别是在堆概念中——这不会改变 C++ 的规则。数组索引从 0 开始,一直到 n-1,其中 n 是条目的总数。尝试在 C++ 中编写基于 1 的假数组通常会导致像您这样的问题。

标签: c++ crash binary-tree main


【解决方案1】:
BinaryTree *a[10];
for(int g=1;g<=10;g++)
{
    a[g] = new BinaryTree(g);
}

会有内存异常。您有一个 10 的数组,并且您正在尝试访问第 11 个元素(因为您一直到 g&lt;=10,而 a[10] 是第 11 个元素)。使用:

for(int g=0;g<10;g++)

相反。如果二叉树从 1 开始,您可能还必须执行 new BinaryTree(g+1);

这也是您代码中其他地方的错误,例如for(int j=1;j&lt;=count;j++)for(int j=0;j&lt;count;j++) 可能是您想要的)。

数组从 0 开始。Why does the indexing start with zero in 'C'?

【讨论】:

  • 是的!我没有看到这个。在更改它之后我运行了 10 次并且它运行良好,现在它应该至少崩溃了两次。你知道为什么每次我运行它都没有抛出异常吗?非常感谢
  • @ibrahim 跑出边界没有必要的行为。该程序没有引发异常。它不必崩溃。它甚至可以看起来像它正在工作,直到突然而痛苦地它却没有。测试所有数组访问是否违反边界对于绝大多数运行良好并保持在其边界内的程序来说是不必要的负担,因此只有在程序员制作它们时才会进行检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多