Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;-将动态数组强制转换为垃圾_C++ - Fatal编程技术网

C++ C++;-将动态数组强制转换为垃圾

C++ C++;-将动态数组强制转换为垃圾,c++,C++,我正在尝试为动态调整大小的sequence类创建一个实现文件。这是一个家庭作业,根据作业的局限性,我只允许弄乱我写的实现文件 问题是,当我创建动态数组时,它似乎是垃圾,没有实际值,而且根本不像数组。当我在调试器中查看它时,我经常会得到一个类似-6.2774385622041925e+066的值(更新:这在某种程度上是由Anders K.的catch解决的,尽管当我现在在调试器中查看时,我得到的是1个普通数字,而不是我应该得到的整个数组,输出显示第一个之后的任何元素仍然是一个疯狂的奇怪数字)。另外

我正在尝试为动态调整大小的sequence类创建一个实现文件。这是一个家庭作业,根据作业的局限性,我只允许弄乱我写的实现文件

问题是,当我创建动态数组时,它似乎是垃圾,没有实际值,而且根本不像数组。当我在调试器中查看它时,我经常会得到一个类似-6.2774385622041925e+066的值(更新:这在某种程度上是由Anders K.的catch解决的,尽管当我现在在调试器中查看时,我得到的是1个普通数字,而不是我应该得到的整个数组,输出显示第一个之后的任何元素仍然是一个疯狂的奇怪数字)。另外,在某一点之后,程序停止运行并抱怨堆已损坏,我怀疑这与显示为不稳定值的数组直接相关

非常感谢您的帮助。我不是在寻找一个彻底的解决方案,但我一定是在哪里做错了什么,惹得我大发雷霆。就像我说的,我只写了实现文件,所以它当然可能是错的

更新:粘贴新的和清理过的代码版本,这样其他愚蠢的错误就不会妨碍大错误

这是我的实现文件(我唯一可以更改的文件)sequence.cpp:

#include "sequence.h"
using namespace main_savitch_4;

typedef double value_type;
typedef std::size_t size_type;

sequence::sequence(size_type initial_capacity){
    data = new value_type[initial_capacity];
    used = 0;
    current_index = initial_capacity + 1;
    capacity = initial_capacity;
}

sequence::sequence(const sequence& source){
    capacity = source.size();
    used = capacity;
    current_index = capacity + 1;
    data = new value_type[capacity];
    for (int i = 0; i < used; i++)
        data[i] = source.data[i];
}

sequence::~sequence(){
    delete [] data;
}

void sequence::resize(size_type new_capacity){
    if (new_capacity > used){
        value_type *temp = new value_type[new_capacity];
        for(int i = 0; i < used; i++)
            temp[i] = data[i];
        value_type *destroyme = data;
        data = temp;
        delete [ ] destroyme;
        capacity = new_capacity;
    }
}

void sequence::start( ){
    current_index = 0;
}

void sequence::advance( ){
    current_index += 1;
}

void sequence::insert(const value_type& entry){
    if (used + 1 > capacity){
        resize(capacity + 5);
    }
    value_type *temp = new value_type[capacity];
    int i(0);
    if (is_item()){
        for(i=i;  i < current_index; i++)
            temp[i] = data[i];
        temp[i] = entry;
        current_index = i;
        i++;
        for(i=i;  i < used; i++)
                temp[i] = data[i];

        value_type *destroyme = data;
        data = temp;
        delete [ ] destroyme;

    }
    else{
        for(int i = used; i > 0; i--)
            data[i] = data[i - 1];
        data[0] = entry;
        current_index = 0;
    }


    used += 1;
}

void sequence::attach(const value_type& entry){
    if (used + 1 > capacity){
        resize(capacity + 5);
    }
    value_type *temp = new value_type[capacity];
    if (is_item()){
        int i(0);
        for(i;  i <= current_index + 1; i++)
            temp[i] = data[i];
        temp[i] = entry;
        current_index = i;
        for(i;  i <= used; i++)
            temp[i] = data[i];
        value_type *destroyme = data;
        data = temp;
        delete [ ] destroyme;       
    }
    else{
        data[used] = entry;
        current_index = used;
    }

    used+= 1;

}

void sequence::remove_current(){
    for(int i = current_index; i < used; i++)
        data[i] = data[i + 1];
    used = used - 1;
}

void sequence::operator=(const sequence& source){
    capacity = source.size();
    used = capacity;
    current_index = capacity + 1;
    data = new value_type[capacity];
    for (int i = 0; i < used; i++)
        data[i] = source.data[i];
}

size_type sequence::size() const{
    return used;
}

bool sequence::is_item() const{
    if (current_index < used)
        return true;
    else
        return false;
}

value_type sequence::current() const{
    return data[current_index];
}
一个问题: 在初始化过程中,您应该初始化所有ITEN

sequence::sequence(size_type initial_capacity){
 data = new value_type[initial_capacity];
 used = 0;
 current_index = initial_capacity + 1;
 capacity = initial_capacity;
}
为什么在最后一项上设置当前的_索引? 此外,当前的_指数应为初始_容量减去1。C开始计算零。

一个问题: 在初始化过程中,您应该初始化所有ITEN

sequence::sequence(size_type initial_capacity){
 data = new value_type[initial_capacity];
 used = 0;
 current_index = initial_capacity + 1;
 capacity = initial_capacity;
}
为什么在最后一项上设置当前的_索引?
此外,当前的_指数应为初始_容量减去1。C开始计算零。

此代码段看起来有点可疑(插入):

我认为你应该做的是在你的方法中添加断言
以确保这些值是您期望的值。

此代码段看起来有点不可靠(插入):

我认为你应该做的是在你的方法中添加断言
确保值符合您的预期。

我相信我已经处理了所有四个数据成员。我错过了什么?当前_索引要求能够根据项目指南不选择任何内容。它多次使用is_item函数检查此项。我决定不选择它的方式是让它的值大于使用的值。这就是为什么它是current_index+1。我相信我已经处理了所有四个数据成员。我错过了什么?当前_索引要求能够根据项目指南不选择任何内容。它多次使用is_item函数检查此项。我决定不选择它的方式是让它的值大于使用的值。这就是为什么当前索引+1只有在当前索引已用完的情况下,代码段才会变为活动的原因。在这种情况下,根据分配,需要在序列的开头插入。我能想到的唯一方法是,在不创建一个全新阵列的情况下,从最后开始将所有内容向下移动一个位置,然后覆盖阵列中的第一个项目。我相信这就是我在那里所做的。接得好。我必须把你的答案读两遍才能理解这个。哎呀!好吧,你应该是我。多么愚蠢的错误!修复这个问题修复了疯狂的数字问题,但是我仍然在测试4的同一点上得到一个堆错误。只有当当前的_索引已经运行时,这个代码段才会变为活动的。在这种情况下,根据赋值,需要在序列的开始插入。我能想到的唯一方法是,在不创建一个全新阵列的情况下,从最后开始将所有内容向下移动一个位置,然后覆盖阵列中的第一个项目。我相信这就是我在那里所做的。接得好。我必须把你的答案读两遍才能理解这个。哎呀!好吧,你应该是我。多么愚蠢的错误!修复了这个问题,修复了疯狂的数字问题,但是在测试4的同一个位置上仍然出现堆错误。
sequence::sequence(size_type initial_capacity){
 data = new value_type[initial_capacity];
 used = 0;
 current_index = initial_capacity + 1;
 capacity = initial_capacity;
}
  for(int i = used; i > 0; i--)
   data[used] = data[i - 1];