std::bad_alloc 在内存位置(可能是创建动态表的 sth)
std::bad_alloc at memory location (probably sth with creating dynamic tables)
我在 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;
}
您的完整代码在"创建"这两个对象时失败。
在完整代码中,您没有初始化 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>
}
查看您的完整代码:
在第 162 行和第 163 行中,构造了 GeneratePass
类的两个不同实例。在下面的第 167 行和第 168 行中,您将在一个对象上调用 ChooseLength
,在另一个对象上调用createList
。
由于对象不共享任何信息,因此对象create
的成员字段ll
未初始化,因此可能是某个非常大的值。
结果,分配失败并抛出std::bad_alloc
.
要解决此问题,您只需使用一个对象。
相关文章:
- 从C++中的数字输入动态创建矩阵
- 如何从QToolBox中动态创建的QLineEdit中获取文本
- 如何在C++中为堆栈动态创建结构?
- 如何使用类型级函数动态创建静态类型?
- 如何在动态创建的CMFCToolbar的工具提示中添加描述?
- 如何设置动态创建的CMFCToolbar的原始状态?
- 我可以动态创建新地图并作为函数参数传递吗?
- 如何在循环中动态创建变量(c++)
- 如何在C++中使用 new 运算符创建对动态创建的数组的引用?
- 在堆或堆栈上分配的动态创建的字符串 - C
- "动态创建的事件处理程序"复选框
- 在字符串数组中动态创建和存储数据
- 第一次尝试使用new动态创建结构数组,程序挂起没有错误
- 无法将动态创建的对象数组从 qml 发送到 c++ 作为方法参数
- 为动态创建的数组使用静态关键字有什么意义吗?
- 有没有办法基于文本文件动态创建对象?
- 从类 c++ 动态创建数组
- 如何在循环中动态创建类对象?
- 动态创建 std::vector 并将其传递给另一个函数的各种方法
- 使用 createComponent 动态创建 QML 对象