std :: bad_alloc在内存位置(可能是创建动态表)

时间:2015-06-14 18:19:11

标签: c++ 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;
}

2 个答案:

答案 0 :(得分:0)

查看完整代码:

在第162和163行中,您构建了GeneratePass类的两个不同实例。在以下第167和168行中,您在一个对象上调用ChooseLength,在另一个对象上调用createList

由于对象不共享任何信息,因此对象ll的成员字段create未初始化,因此可能是一些非常大的值。

结果,分配失败并抛出std::bad_alloc

要解决此问题,您只需使用一个对象。

答案 1 :(得分:0)

您的完整代码无法“创建”这两个对象。

在完整代码中,您没有初始化ll,但是您在构造函数中使用了它。如果您打算让用户选择长度,则不应在构造函数中创建数组。相反,您需要在choose_length函数中执行此操作。

str(cmd)