2016-04-29 14 views
0

Unten ist meine einfache Code-Snippet.Variable Länge Array Speicherplatz in C/C++

#include <iostream> 
using namespace std; 

bool testAllocArray(const unsigned int length) 
{ 
    char array[length]; //--------------------------(1) 
    return true; 
} 

int main(int argc, char** argv) 
{ 
    testAllocArray(1024);  
    return 0; 
} 

Bei Anweisung (1) scheint das Array nicht im Heap zugeordnet zu sein. Ich dachte, es wäre auf dem Haufen verteilt. Wenn es im Stapel zugeordnet ist, führt dies nicht zum Absturz einiger unechter Wertlänge, da die Stapelgröße ziemlich klein ist?

Antwort

0

Es ist nicht auf dem Heap, sondern auf dem Stapel zugeordnet. Und wenn diese Funktion zurückkehrt, ist sie nicht mehr gültig. Gleiches Verhalten wie jede andere lokale Variable in einer Funktion

+0

Danke Stian. Ist das nicht ein Problem? Weil die Länge einen beliebigen Wert bis zum Maximum ihrer Grenze haben kann. – Suresh

+0

Wenn die Länge eine sehr große Zahl ist, kann der Anwendungsstapel überlaufen, was je nach CPU und Betriebssystem zu einem Segmentierungsfehler oder einem definierten Verhalten führt. Aber die meisten heutigen Systeme können wahrscheinlich einige Megabyte Speicher auf dem Stack haben –