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