0

現在、文字列を格納するクラスに取り組んでいます。2 つの別個のコンストラクターが必要で、1 つはユーザーが argv 型の引数でオブジェクトを初期化できるようにし、もう 1 つは Environment 型の引数でオブジェクトを初期化します。

argv を使用すると、すべてが完全に機能し、オブジェクトは正しく初期化され、コマンド ラインに追加したすべての文字列が保存されます。ただし、環境変数については、問題が発生します。すべての環境文字列をオブジェクトに格納することは、私がアクセスできるメモリを超えているため、野心的に思えます。

環境変数のサイズを小さくしたり、 main が引数として取る変数の量を制御したりする方法はありますか?

参考までに、クラスには 2 つのデータ メンバーが含まれています。1 つは格納された文字列の量を格納し、もう 1 つは文字列の実際の配列です。環境変数の量を引数として使用して、動的に割り当てられた配列を使用してみました (for ループを使用してカウントされます)。ただし、変数が多すぎるように見えるため、bad_alloc エラーが発生します。

Stringstore::Stringstore(char ** envp)
{  
    for (char** env = envp; *envp != nullptr; ++env)
        ++d_size;
    d_str = new string[d_size];
    for (int index=0; index != d_size; ++index)
        d_str[index] = envp[index];
} 

class Stringstore
{
string *d_str;
int d_size;
public:
    Stringstore(int argc, char **argv1);
    Stringstore(char **envp);
};


int main(int argc, char **argv, char **envp)
{
    Stringstore(envp);    
}
4

1 に答える 1