Ich arbeite derzeit an einer Klasse, die Strings speichert. Es soll zwei separate Konstruktoren haben, von denen einer dem Benutzer erlaubt, das Objekt mit Argv-Argumenten zu initialisieren, während der andere das Objekt mit Umgebungstypen von Argumenten initialisiert.Speichern von Umgebungsvariablen in einem dynamisch zugewiesenen Array
Alles funktioniert perfekt, wenn ich Argv verwende, das Objekt ist korrekt initialisiert und speichert jede Zeichenfolge, die ich in der Befehlszeile hinzugefügt. Allerdings stoße ich für die Umgebungsvariablen in Schwierigkeiten. Das Speichern jeder Umgebungszeichenkette in meinem Objekt scheint zu ambitioniert, da es den Speicher übersteigt, auf den ich Zugriff habe.
Gibt es Möglichkeiten, die Größe der Umgebungsvariablen zu reduzieren oder die Anzahl der Variablen zu steuern, die main als Argument benötigt?
Fyi, die Klasse enthält zwei Datenelemente: eins speichert die Menge der gespeicherten Strings, während das andere das eigentliche Array von Strings ist. Ich habe versucht, ein dynamisch zugewiesenes Array zu verwenden, wobei die Menge der Umgebungsvariablen als Argument verwendet wurde (gezählt mit einer for-Schleife). Es scheint jedoch zu viele Variablen zu geben, daher habe ich einen bad_alloc Fehler.
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);
}
vielleicht könnten Sie schreiben einige [MCVE]? Auf einem modernen Computer bin ich überrascht, dass du ein env nicht kopieren kannst. Variablen. –
Ich habe den Kerncode hinzugefügt, den ich derzeit habe, um ein Objekt mit Umgebungsvariablen zu initialisieren. – Blackjaguar
Was sind die Symptome des Fehlers, wäre es zufällig eine Endlosschleife? (Und angenommen, ein Speicherfehler wäre falsch) –