2016-04-29 6 views
0

Ниже приведен мой простой фрагмент кода.Объем хранилища переменной длины в 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; 
} 

В заявлении (1) массив, кажется, не выделяется в куче. Я думал, это будет выделено в кучу. Если это выделено в стеке, это не приводит к сбою некоторой частичной длины, поскольку размер стека в значительной степени мал?

ответ

0

Он не находится на куче, а на стеке. И когда эта функция вернется, она перестает действовать. Такое же поведение, как и любая другая локальная переменная в функции

+0

Спасибо Stian. Разве это не проблема? Поскольку длина может быть любой величиной вплоть до максимального предела. – Suresh

+0

Если длина является очень большим числом, то стек приложения может переполняться, что приводит к ошибке сегментации или неопределенному поведению в зависимости от процессора и операционной системы. Но большая часть сегодняшней системы, вероятно, может содержать несколько мегабайт памяти в стеке –