Вы можете использовать new / delete для выделения / освобождения памяти в куче. Это медленнее и, возможно, более подвержено ошибкам, чем использование char [n], но это, к сожалению, пока не является частью стандарта C ++.
Вы можете использовать класс массива boost для исключительного безопасного метода использования new []. delete [] автоматически вызывается a , когда выходит из области видимости.
void f(int n) {
boost::scoped_array<char> a(new char[n]);
/* Code here. */
}
Вы также можете использовать std :: vector и резервировать () несколько байтов:
void f(int n) {
std::vector<char> a;
a.resize(n);
/* Code here. */
}
Если вы хотите хотите использовать char [n], скомпилируйте как код C99 вместо кода C ++.
Если вам по какой-то причине необходимо обязательно разместить данные в стеке, используйте _alloca или _malloca / _freea, которые являются расширениями, предоставляемыми библиотеками MSVC и другими.