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>

 }