C++ 将新元素添加到动态数组c++;

C++ 将新元素添加到动态数组c++;,c++,arrays,C++,Arrays,我知道这是最基本的,但我无法接受。 我想向数组中添加x乘以y的元素。 当我添加1x10000个元素时,就可以了。 但是,当我尝试添加5000x5000个元素时,它会立即停止,并出现许多不同的错误,而不是错误的alloc。 如果有人能给我一些线索,我会非常高兴 #include <iostream> #include <numeric> #include <chrono> #include <cstdlib> class Array { i

我知道这是最基本的,但我无法接受。 我想向数组中添加x乘以y的元素。 当我添加1x10000个元素时,就可以了。 但是,当我尝试添加5000x5000个元素时,它会立即停止,并出现许多不同的错误,而不是错误的alloc。 如果有人能给我一些线索,我会非常高兴

#include <iostream>
#include <numeric>
#include <chrono>
#include <cstdlib>

class Array
{
    int *tab; //dynamic array
    int cnt; //count
public:
    Array();
    void clearArray();//deleting table
    void test_addValueToArray(int index, int value);
};

Array::Array() : tab(nullptr), cnt(0){;}

void Array::clearArray()
{
    if(cnt==0)
        return;
    delete tab;
    cnt=0;
}

void Array::test_addValueToArray(int index, int value)
{
    int *NewTab = new int[cnt+1];
    for(int i=0;i<index;++i)
        NewTab[i]=tab[i];
    NewTab[index]=value;
    for(int i=index+1;i<cnt+1;++i)
        NewTab[i]=tab[i-1];
    delete[] tab;
    tab=NewTab;
    ++cnt;
}

Array myArray;

int main()
{
    int elements, times;
    std::cout<<"How many elements?";
    std::cin>>elements;
    std::cout<<"How many times?";
    std::cin>>times;
    auto start = std::chrono::high_resolution_clock::now();
    for(int j=0; j<times; ++j)
    {
        for(int i=0; i<elements ; ++i)
            myArray.test_addValueToArray(0,rand()%1000);
        myArray.clearArray();
    }
    auto stop = std::chrono::high_resolution_clock::now();
    std::chrono::duration<double> time=stop-start;
    std::cout<<"Avarage time:"<<time.count()/times<<"\n";
}
#包括
#包括
#包括
#包括
类数组
{
int*tab;//动态数组
int cnt;//计数
公众:
数组();
void clearArray();//删除表
无效测试\u addValueToArray(int索引,int值);
};
数组::数组():tab(nullptr),cnt(0){;}
void数组::clearArray()
{
如果(cnt==0)
返回;
删除标签;
cnt=0;
}
void数组::test_addValueToArray(int索引,int值)
{
int*NewTab=新int[cnt+1];

对于(int i=0;i问题是因为使用delete[]进行大量连续内存释放, 另外,您只使用了delete选项卡,该选项卡应更改为cleararray中的delete[]选项卡,以便您可以使用智能指针

另外:在您的测试中,当cnt=0时,您试图释放未分配的内存,我不明白为什么在调用addValueToArray()时将0作为索引传递,我认为此时应该是i


所以,一旦你修复了这个问题并使用了智能指针,它应该可以工作,否则它会在运行一段时间后显示坏的alloc异常。

第一个问题:在clearArray中,你可能想要
删除[]选项卡;
,而不是
删除选项卡;
。第二个问题:如果调用clearArray后访问tab[i],会发生什么?