Wie erstelle ich ein array in C++, die auf dem heap statt auf dem stack?
Ich habe ein sehr großes array zurück, das muss 262144 Elemente in der Länge (und potentiell viel größer in Zukunft). Ich habe versucht, die Zuweisung der Arrays auf dem stack etwa so:
#define SIZE 262144
int myArray[SIZE];
Jedoch scheint es, dass, wenn ich versuchen, und fügen Sie Elemente an einem bestimmten Punkt, die Werte sind unterschiedlich, wenn ich versuche auf Sie zuzugreifen. Ich verstehe, dass dies ist, weil es nur eine endliche Menge an Speicher auf dem stack, im Gegensatz zu den Haufen, die hat mehr Speicher.
Ich habe Folgendes versucht, ohne viel Glück (nicht kompiliert):
#define SIZE 262144
int *myArray[SIZE] = new int[SIZE];
Und dann zog ich mit malloc
, aber ich Frage mich, ob es war eine C++ - ähnliche Art und Weise, dies zu tun...
#define SIZE 262144
int *myArray = (int*)malloc(sizeof(int) * SIZE);
Sollte ich gehen Sie einfach mit malloc
?
- ändern "myArray[GRÖßE]", "myArray" in deinem zweiten code-block.
- Vijay, das ist nicht eine Frage des Lernens die syntax. Die erste option ist richtig, außer für die Größe, und die zweite option ist ein normaler bug, der es verdient, erwähnt zu werden. Und außerdem ist diese Seite auch zu helfen, wenn jemand nicht verstehen, die syntax?
- Um ein syntax-Fehler in einer Frage nicht eine schlechte Frage.
- Gerade aus den FAQ: Keine Frage ist zu trivial oder zu "newbie". Seien Sie tolerant gegenüber anderen, die nicht wissen, was du alles weißt. Bringen Sie Ihren Sinn für humor.
- Vijay, vielleicht ist diese Seite für Sie nicht. Foren sind oft der beste Ort, um zu starten flame wars, Sie sollten überprüfen Sie Sie heraus. Meine Erfahrung von Stack Overflow wurde für die Nutzer zu Fragen, was Sie fühlen, wie zu Fragen, unabhängig davon, wie newbish.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werden Sie verwenden möchten neue wie:
Werde ich auch erwähnen, dass die andere Seite von diesem, nur für den Fall....
Seit Ihrem Umstieg vom stack auf den heap, werden Sie auch brauchen, reinigen Sie diesen Speicher, wenn Sie fertig sind mit ihm. Auf dem Stapel, wird der Speicher automatisch Aufräumen, aber auf dem heap, werden Sie brauchen, um es zu löschen, und da es ein array verwenden, sollten Sie:
Mehr C++ - Weg, es zu tun ist die Verwendung von Vektor. Dann müssen Sie nicht haben, um sorgen über das löschen des Speichers wenn Sie fertig sind; vector wird es für Sie tun.
Als die Anzahl ist nicht unbedingt bekannt ist zur compile-Zeit den Typ Zeiger:
new
reserviert auf dem heap.Ich glaube
sollte
oder noch besser
Den Grund der erste Versuch hat nicht funktioniert, ist, dass die syntax nicht korrekt ist. Versuchen Sie dies:
Ihre syntax für die Verwendung
new
war falsch, es sollte sein:Sie müssen nur die Größe auf der rechten Seite der Zuweisung.
Allerdings, wenn Sie mit C++ vielleicht möchten Sie sich bei der Benutzung der
std::vector
(die Sie haben) oder so etwas wieboost::scoped_array
zu machen, die die Speicher-Verwaltung ein bisschen einfacher.