我在使用c ++创建动态表时遇到了问题。 我的节目打破并大喊:
xxx.exe中0x75914598处的未处理异常:Microsoft C ++异常:内存位置为0x0107F73C的std :: bad_alloc。
我知道有一些我不知道的东西,所以如果你能这么善良并指出我在哪里以及如何修复它。
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;
}
答案 0 :(得分:0)
查看完整代码:
在第162和163行中,您构建了GeneratePass
类的两个不同实例。在以下第167和168行中,您在一个对象上调用ChooseLength
,在另一个对象上调用createList
。
由于对象不共享任何信息,因此对象ll
的成员字段create
未初始化,因此可能是一些非常大的值。
结果,分配失败并抛出std::bad_alloc
。
要解决此问题,您只需使用一个对象。
答案 1 :(得分:0)
您的完整代码无法“创建”这两个对象。
在完整代码中,您没有初始化ll,但是您在构造函数中使用了它。如果您打算让用户选择长度,则不应在构造函数中创建数组。相反,您需要在choose_length函数中执行此操作。
str(cmd)