1

我在 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;
}
4

2 回答 2

0

查看您的完整代码:

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

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

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

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

于 2015-06-14T18:38:37.777 回答
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>

 }
于 2015-06-14T18:54:08.203 回答