"char buf[n];" - Можно ли так объявлять массив? И что означает ошибка: "no loadable sections found in added symbol-file system-supplied DSO at ..."?

Начну с кода:

#include <iostream>
#include <malloc.h>
using namespace std;

void testCore(char * buf, int n)
{
    if(n<2)
        return;

    for(int i=0;i<n;++i)
        buf[i]='A'+(i%26);
    buf[n-1]=0;
    cout<<buf;
}

void test(int n)
{
    char buf[n];
    //char * buf = (char*)malloc(n);
    testCore(buf, n);
    //free(buf);
}

int main(int argc, char *argv[])
{
    int n;
    cin>>n;
//    test(10);
//    test(100);
//    test(1000000);
    test(n);

    return 0;
}

Собственно говоря тестовая программка для собственного понимания. Мне казалось, что объявлять массив так - "char buf[n];" - нельзя. НО! программа работает вполне стабильно, за исключением ошибки - no loadable sections found in added symbol-file system-supplied DSO at 0x7ffdd2bee000 Кто может помочь с разъяснением?


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

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

В С теоретически можно (в том плане, что последние стандарты это поддерживают, но не все компиляторы реализуют такую поддержку).

В С++ теоретически нельзя — в стандарте такой возможности нет. Но на практике тот же GCC (G++) предоставляет соответствующее расширение.

Соответственно, вопрос, использовать или нет — это вопрос переносимости вашего кода.

→ Ссылка