Ошибка "Выражение имеет константное значение"

введите сюда описание изображенияВыбивает ошибки при объявлении масивов: N - должно быть константное, хотя объявляю его константным. Почему ?

#include <stdio.h>
#include <math.h>
double f(double x)
{
    return sin(x);
}
void progonka(double* y, double* h, const int N, double* c)
{
    int i = 1;


    double alfa[N + 1], beta[N + 1], hamma[N + 1], delta[N + 1], A[N + 1], B[N + 1];
    alfa[1] = hamma[1] = delta[1] = 0.0;
    beta[1] = 1.0;
    for (i = 2; i <= N; i++)
    {
        alfa[i] = h[i - 1];
        beta[i] = 2 * (h[i - 1] + h[i]);
        hamma[i] = h[i];
        delta[i] = 3 * (((y[i] - y[i - 1]) / h[i]) - ((y[i - 1] - y[i - 2]) / h[i - 1]));
    }
    hamma[N] = 0.0;
    A[1] = -hamma[1] / beta[1];
    B[1] = delta[1] / beta[1];
    for (i = 2; i <= N - 1; i++)
    {
        A[i] = -hamma[i] / (alfa[i] * A[i - 1] + beta[i]);
        B[i] = (delta[i] - alfa[i] * B[i - 1]) / (alfa[i] * A[i - 1] + beta[i]);
    }
    c[N] = (delta[N] - alfa[N] * B[N - 1]) / (alfa[N] * A[N - 1] + beta[N]);
    for (i = N; i > 1; i--)
    {
        c[i - 1] = A[i - 1] * c[i] + B[i - 1];
    }
}

Ответы (1 шт):

Автор решения: Harry

Константное в данном контексте означает - известное во время компиляции!

Ну не поддерживает Visual Studio (вы же им пользуетесь?) возможность VLA...

Или выделяйте массивы размера, достаточного при любом вашем N, либо выделяйте их динамически (только потом не забывайте удалять, освобождая память).

→ Ссылка