std::bad_alloc 在内存位置(可能与创建动态表有关)
std::bad_alloc at memory location (probably sth with creating dynamic tables)
我在用 C++ 创建动态 table 时遇到问题。
我的程序中断并大喊:
Unhandled exception at at 0x75914598 in xxx.exe: Microsoft C++ exception: std::bad_alloc at memory location 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;
}
查看您的完整代码:
在第 162 行和第 163 行中,您构建了 GeneratePass
class 的两个不同实例。在下面的第 167 行和第 168 行中,您对一个对象调用 ChooseLength
,对另一个对象调用 createList
。
由于对象不共享任何信息,对象 create
的成员字段 ll
未初始化,因此可能是某个非常大的值。
因此,分配失败并抛出 std::bad_alloc
。
要解决此问题,您只需使用一个对象即可。
您的完整代码在 "creating " 两个对象中失败。
在你的完整代码中,你没有初始化 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>
}
我在用 C++ 创建动态 table 时遇到问题。 我的程序中断并大喊:
Unhandled exception at at 0x75914598 in xxx.exe: Microsoft C++ exception: std::bad_alloc at memory location 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;
}
查看您的完整代码:
在第 162 行和第 163 行中,您构建了 GeneratePass
class 的两个不同实例。在下面的第 167 行和第 168 行中,您对一个对象调用 ChooseLength
,对另一个对象调用 createList
。
由于对象不共享任何信息,对象 create
的成员字段 ll
未初始化,因此可能是某个非常大的值。
因此,分配失败并抛出 std::bad_alloc
。
要解决此问题,您只需使用一个对象即可。
您的完整代码在 "creating " 两个对象中失败。
在你的完整代码中,你没有初始化 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>
}