• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Локальные массивы переменной длины

  • Автор темы DiRob
  • Дата начала
Статус
Закрыто для дальнейших ответов.
D

DiRob

Стандартом С99 предусмотрены локальные массивы переменной длины.

void func(const int a)
{
double Arr[a];
...
}

Чем я активно пользовался.
Но тут мне потребовалось написать кое какую ерунду под винды.
Я использовал Microsoft Visual Studio .NET 2003 и понял, что ничего не понял.
Конструкция описанная выше забраковывалась со следующим основанием:

..\VarArr.cpp(18): error C2057: expected constant expression
..\VarArr.cpp(18): error C2466: cannot allocate an array of constant size 0
..\VarArr.cpp(18): error C2133: 'Arr' : unknown size

MSDN по этому поводу логичен и лаконичен, из чего я могу предположить, что такое не прокатит. Сама проблемма решается простым использованием динамического выделения, дело не в этом. Просто как то странно это...

Вопрос:
1. Почему???
2. Какому стандарту принадлежит данный компилятор???

P.S. Пробовал Visual Studio 2005, результат тот же... Может там чего настроить надо?
 
D

Dimmuborgir

сделайте вызов этой функции. к примеру
Код:
func(4);
.
 
D

DiRob

VarArr.cpp
------------------------------------------------
#include "stdio.h"

extern void func(const int a);

int main(void)
{
func(20);
return 0;
}

void func(const int a)
{
int Arr[a];
}
------------------------------------------------

При компиляции такого файлика, получаем:
..\VarArr.cpp(14): error C2057: expected constant expression
..\VarArr.cpp(14): error C2466: cannot allocate an array of constant size 0
..\VarArr.cpp(14): error C2133: 'Arr' : unknown size
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
welcome to the real worl. так же как не все йогурты одинаково полезны, не все компилаторы одинаково хорошо держат стандарт. и спользование слабо переносимых фенечек считается плохим тоном. используй std::auto_prt(new ...) или еще лучше сразу std::vector
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
можно пробовать bounded_array из буста, он на стеке выделяет память
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!