現在、文字列を格納するクラスに取り組んでいます。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);
}