c++;动态数组浮点异常 对于我的家庭作业,我必须用C++的数组和指针来设计一个数组,使数组动态。我已经做了大量的测试,我的函数工作正常,但是当我使用老师提供给我的main时,我得到了这个浮点错误。这个家庭作业的重点是创建一个可以为教师主课工作的类,而不改变主课中的任何代码

c++;动态数组浮点异常 对于我的家庭作业,我必须用C++的数组和指针来设计一个数组,使数组动态。我已经做了大量的测试,我的函数工作正常,但是当我使用老师提供给我的main时,我得到了这个浮点错误。这个家庭作业的重点是创建一个可以为教师主课工作的类,而不改变主课中的任何代码,c++,dynamic-arrays,floating-point-exceptions,C++,Dynamic Arrays,Floating Point Exceptions,主要内容如下: #include "ArrayList.h" #include <iostream> using namespace std; int main(int argc,char *argv[]) { ArrayList arr; for (int i=1;i<=50;i++) { arr.push_back(i); } cout << "Should contain numbers 1..50

主要内容如下:

#include "ArrayList.h"
#include <iostream>
using namespace std;

int main(int argc,char *argv[])
{
    ArrayList arr;

    for (int i=1;i<=50;i++)
    {
        arr.push_back(i);
    }

    cout << "Should contain numbers 1..50, is ";

    cout << arr.toString() << endl;

    for (int i=arr.size()-1;i>=1;i--)
    {
        arr.erase(arr[i]);
    }   

    cout << "Should contain only 1, is ";
    cout << arr.toString() << endl;

    arr.erase(arr[0]);

    for (int i=1;i<=50;i++)
    {
        if (i<=2)
            arr.push_back(i);
        else
        {
            int j=1;
            while ((j<arr.size()) && (i%arr[j]!=0))
                j++;

            if (j==arr.size())
            {
                arr.push_back(i);
            }
        }
    }

    cout << "Prime numbers between 1 and 50 are: " << arr.toString() << endl;

}

用于(int j= i;jSuffic像它会访问数组外的某物吗?是的!你应该重新考虑你的循环条件。当你在它的时候,考虑用户想要删除数组中没有元素的情况。也考虑数组中可能有重复的情况。我会重新思考这一点,但问题是I。在main的while循环中没有调用erase()函数时出现此错误,我想在修复我的逻辑之前确保它正在运行。你能显示你的
size()
函数吗?
#include<iostream>
#include<string>
#include<sstream>
#include "ArrayList.h"

using namespace std;
void ArrayList:: intialArr(int arr[])
{
    for(int i = 0; i < length; i++)
    {
        arr[i] = 0;
    }
}

string ArrayList:: toString()
{
    std::ostringstream ss;
    for(int i = 0; i < capacity; i++)
    {
        if(arr[i]>0 || arr[i] <0)
        {
            ss << arr[i] << " ";
        }
    }
    return ss.str();
}

ArrayList::ArrayList()
{
    length = 1;
    capacity=0;
    arr = new int[length];
    intialArr(arr);
}

int& ArrayList:: operator[] (unsigned int i)
{
    return arr[i];
}

void ArrayList:: push_back(int m)
{
    if(capacity>=length)
    {   
       int oldlength = length;

       length = length*2;
       int* curArr = new int[length];
       intialArr(curArr);
       for (int i = 0; i < oldlength; i++)
       {
          curArr[i] = arr[i];
       }
       delete [] arr;
       arr = curArr;
    }

    arr[capacity] = m;
    capacity++;
}   


void ArrayList:: erase(int m)
{
        if(capacity == length/2)
        {   
            length = length/2;
            int* curArr = new int[length];
            intialArr(curArr);      
        for (int i = 0; i<capacity; i++)
        {
                curArr[i] = arr[i];

        }
        delete [] arr;
        arr = curArr;
        }

        for(int i = 0; i < capacity; i++)
        {
            if(arr[i]==m)
            {
                for(int j = i; j<length; j++)
                {
                    arr[j] = arr[j+1];
                }
                capacity--;
                break;
            }
    }
    cout << "length = " << length << " capacity = " << capacity << " capacity/length = " << capacity*2 << endl;
}
j = 1 and arr[j] = 2
i = 5 and arr.size() = 4