При запуске программы C++ возвращает число -1073741819
Ошыбка: Вызвано исключение по адресу 0x00007FF9B3EB7A20 (ucrtbased.dll) в Find Pass.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFFFFFFFFFFFFFFFF.
Код:
#include <string>
#include <fstream>
#include <cmath>
using namespace std;
int main()
{
int l, i;
int step = 0;
cout << "Lenght:";
cin >> l;
cout << endl;
string PassV = "";
const char* AllSymb[] = { "Z","Y","X","W","V","U","T","S","R","Q","P","O","N","M","L","K","J","I","H","G","F","E","D","C","B","A","z","y","x","w","v","u","t","s","r","q","p","o","n","m","l","k","j","i","h","g","f","e","d","c","b","a","!","#","$","&","(",")","*","+",",","-",".","/",":",";","<",">","=","@","?","[","]","\\","^","_","`","{","}","|","~" };
int IndArr[15] = {};
int l_Arr = sizeof(AllSymb) / sizeof(*AllSymb);
for (i = 0; i <= l-1; i++) { IndArr[i] = 0; }
while (step != pow(l_Arr , l)) {
for (i = 0; i <= l_Arr; i++)
{
PassV = "";
for (i = 0; i <= l-1; i++)
{
PassV += AllSymb[IndArr[i]];
}
IndArr[0] += 1;
cout << PassV << endl;
step += 1;
}
for (i = 0; i <= l-1; i++)
{
if (l_Arr == IndArr[i]) {
IndArr[i + 1] += 1;
IndArr[i] = 0;
}
}
}
return 0;
}
Код должен быстро перебирать возможные варианты паролей из символов данных в массиве AllSymb. Количество символов задается пользователем.
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Добавляем маленькую отладочную строку...
for (i = 0; i <= l-1; i++)
{
assert(IndArr[i] <= l_Arr);
PassV += AllSymb[IndArr[i]];
}
и программа вылетает с сообщением о том, что это условие не выполнено, т.е. что вы вышли за пределы массива.
Дальше рассказывать или уже понятно?...
Можно написать вместо assert более подробный вывод:
if (IndArr[i] > l_Arr)
{
cout << "i = " << i << "; IndArr[i] = " << IndArr[i] << endl;
return 0;
}
и получить
i = 0; IndArr[i] = 82
Теперь, думаю, все уже очевидно...