std :: bad_alloc в ячейке памяти (вероятно, sth с созданием динамических таблиц)

У меня проблема с созданием динамической таблицы в C ++.
Моя программа ломается и кричит:

Необработанное исключение по адресу 0x75914598 в xxx.exe: исключение Microsoft C ++: std :: bad_alloc в расположении памяти 0x0107F73C.

Я знаю, что я что-то упускаю, так что, если вы можете быть так добры и указать мне, где и как это починить.
ll имеет случайное значение (но даже если я установлю значение, как в приведенном ниже коде, я получаю ту же ошибку, поэтому проблема в следующем коде), которая генерируется в другой функции (проблема в этом коде: /).

Полный код:
http://pastebin.com/Gafjd5Um

Код:

#include <iostream>
#include <math.h>
#include <cstdio>
#include <locale.h>
#include <conio.h>
#include <cstdlib>
#include <time.h>
#include <vector>

class GeneratePass
{

private:
//int length;
int ll=5;
char *lowertab;

public:
void ChooseLenght();
void CreateList();
GeneratePass()
{
lowertab = new char[ll];
}
~GeneratePass()
{
delete[] lowertab;
}
};

void GeneratePass::CreateList()
{srand( time( NULL ) );
int i, j;

for( i = 0; i < ll; i++ )
{
lowertab[ i ] =( char )( rand() % 24 ) + 97;

}
for( i = 0; i < ll; i++ )
{
cout << lowertab[ i ];

}
}int main()
{
GeneratePass create;
create.CreateList();

return 0;
}

1

Решение

Ваш полный код не смог «создать» два объекта.

В своем полном коде вы не инициализировали ll, но использовали его в конструкторе. Если вы намереваетесь позволить пользователю выбрать длину, вы НЕ должны создавать массив в своем конструкторе. Вместо этого вам нужно сделать это в функции choose_length.

  GeneratePass()
{
lowertab = NULL;
ll=0;
}void GeneratePass::CreateList()
{
if(ll<1 || ll > 1024*1024*1024) throw "Invalid length";
lowertab = new char[ll];
....
<your code here>

}
0

Другие решения

Глядя на ваш полный код:

В строках 162 и 163 вы создаете два разных экземпляра вашего GeneratePass учебный класс. В следующих строках 167 и 168 вы звоните ChooseLength на одном объекте и createList с другой.

Поскольку объекты не разделяют какую-либо информацию, поле участника ll объекта create неинициализирован, и поэтому может иметь чрезвычайно большое значение.

В результате происходит сбой распределения и выбрасывает std::bad_alloc,

Чтобы это исправить, вам нужно использовать только один объект.

0

По вопросам рекламы [email protected]