我必须做一些项目,但我被困住了。我收到一个 bad_alloc 错误。我检查了很多次代码,试图谷歌一些解决方案,但仍然没有,这就是我在这里写的原因。问题是程序运行正常,但在任务管理器中,他的内存使用量增加到 2GB(这是限制为我知道)然后它崩溃了。程序需要检查分配空间和复制变量的时间。以下是部分代码:
class Table
{
int *tablica;
int size;
public:
Table()
{
tablica = NULL;
size = 0;
}
~Table()
{
delete tablica;
size = 0;
}
int *push_back(int val)
{
int *temp = new int[size];
if(size % 10 == 0)
{
for(int i = 0; i < size; i++)
temp[i] = tablica[i];
tablica = new int[size + 10];
for(int i = 0; i < size; i++)
tablica[i] = temp[i];
}
tablica[size] = val;
size++;
delete []temp;
return tablica;
}
void test()
{
LONGLONG measure[100][6];
LARGE_INTEGER performanceCountStart, performanceCountEnd;
int cpy_tab [20000];
for(int j = 0; j < 100; j++)
{
for(int i = 0; i < 20000; i++)
cpy_tab[i] = rand() % 10000 - 10000;
performanceCountStart = startTimer();
for(int i = 0; i < 500; i++)
{
push_back(cpy_tab[i]);
}
performanceCountEnd = endTimer();
measure[j][0] = performanceCountEnd.QuadPart - performanceCountStart.QuadPart;
cout<<j<<"."<<measure[j][0]<<endl;
delete []tablica;
size = 0;
performanceCountStart = startTimer();
for(int i = 0; i < 2000; i++)
{
push_back(cpy_tab[i]);
}
performanceCountEnd = endTimer();
measure[j][1] = performanceCountEnd.QuadPart - performanceCountStart.QuadPart;
cout<<j<<"."<<measure[j][1]<<endl;
delete []tablica;
size = 0;
performanceCountStart = startTimer();
for(int i = 0; i < 4000; i++)
{
push_back(cpy_tab[i]);
}
performanceCountEnd = endTimer();
measure[j][2] = performanceCountEnd.QuadPart - performanceCountStart.QuadPart;
cout<<j<<"."<<measure[j][2]<<endl;
delete []tablica;
size = 0;
performanceCountStart = startTimer();
for(int i = 0; i < 8000; i++)
{
push_back(cpy_tab[i]);
}
performanceCountEnd = endTimer();
measure[j][3] = performanceCountEnd.QuadPart - performanceCountStart.QuadPart;
cout<<j<<"."<<measure[j][3]<<endl;
delete []tablica;
size = 0;
performanceCountStart = startTimer();
for(int i = 0; i < 14000; i++)
{
push_back(cpy_tab[i]);
}
performanceCountEnd = endTimer();
measure[j][4] = performanceCountEnd.QuadPart - performanceCountStart.QuadPart;
cout<<j<<"."<<measure[j][4]<<endl;
delete []tablica;
size = 0;
performanceCountStart = startTimer();
for(int i = 0; i < 20000; i++)
{
push_back(cpy_tab[i]);
}
performanceCountEnd = endTimer();
measure[j][5] = performanceCountEnd.QuadPart - performanceCountStart.QuadPart;
cout<<j<<"."<<measure[j][5]<<endl;
delete []tablica;
size = 0;
}
}
解决这个问题的任何想法对我来说都是值得的!