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

std::bad_alloc at memory location (probably sth with creating dynamic tables)

本文关键字:动态 创建 sth alloc bad 内存 std 位置      更新时间:2023-10-16

我在 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 .

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