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

完全なコードは、2 つのオブジェクトの「作成」に失敗しました。

完全なコードでは、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 に答える