我在为学校作业编写的C++程序中遇到了一个非常奇怪的错误(最后粘贴的代码),我无法弄清楚它为什么会这样做.特别是,它有时会给出随机错误的输出,有时会提供正确的输出,每次都在相同的输入上运行.如果有人可能对原因有所了解,我会非常感激:
我做了一个C++程序,它有一个简单的MaxHeap数据结构的实现,它支持使用HeapInsert构建堆,从空堆开始逐个地将元素插入堆中,或者从元素数组开始并使用在元素的前半部分冒泡以将其转换为堆 - 程序采用一个命令行参数,HeapInsert将使用第一种构建堆的方法,或BubbleDown将使用第二种方法构建堆.
该程序从cin获取用户输入:首先是为了使堆出来而给出的元素数,然后是要放入堆中的元素.完成后,它输出在冒泡/冒泡中执行的交换次数,然后输出堆的元素,以便它们位于存储堆的数组中.
我们已经给出了一个示例输入(100个随机数)和一个我的代码应该生成的示例输出,以便知道我们的实现是正确的.我在命令行上执行以下操作:
g++ HeapTest.cpp
./a.out BubbleDown < 100.txt > out
diff out s100b.txt
Run Code Online (Sandbox Code Playgroud)
100.txt是样本输入,s100b.txt是正确的样本输出.
执行行
./a.out BubbleDown < 100.txt > out
diff out s100b.txt
Run Code Online (Sandbox Code Playgroud)
反复,我得到不一致的结果.似乎有一半的时间我得到了我的输出完全匹配样本文件,但有一半时间它没有,特别是当我查看我的输出文件时,它看起来像一个随机的大数字已被插入我的堆中没有原因,使我的输出错误.
对我来说,完全没有意义的结果是在使用完全相同的输入重复运行代码时会不一致.这只发生在我在命令行上使用"BubbleDown"选项时.以下是我的代码:
#include <cstdlib>
#include <stdint.h>
#include <iostream>
#include <string>
#include <cstring>
#include <cassert>
#include <cmath>
using namespace std;
struct MaxHeap { //MaxHeap data structure
int n; //size of the heap
int numex; //number of exchanges in building the heap
int* A; //Array storing the actual heap
MaxHeap(int a){ //First …Run Code Online (Sandbox Code Playgroud) c++ ×1