これは基本的なことですが、それを乗り越えることはできません。 私の配列にx回のy要素を追加したいと思います。 1x100000要素を追加すると問題ありません。 しかし、5000x5000要素を追加しようとすると、即座に停止し、さまざまなエラーが発生し、不正なallocは発生しません。誰かが私にこのについての手掛かりを与えることができれば は私がextremaly gladfulだろう...ダイナミックアレイに新しい要素を追加するC++
#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";
}
最初の問題:clearArrayでは、おそらく 'delete [] tab;'であり、 'delete tab;'ではありません。 第2の問題:clearArrayを呼び出した後にtab [i]にアクセスするとどうなりますか? – wolff