C - Ошибка динамического массива целых чисел (Код: Blocks / Visual Studio) - PullRequest
0 голосов
/ 17 ноября 2018

Может кто-нибудь объяснить, почему я получаю ошибку при выполнении этого кода в Visual Studio 17, но не в Code: Blocks?

    int n,m;
    int main (){
    printf("n");
    scanf("%d", &n);
    printf("m");
    scanf("%d", &m);

    int tab[n][m];    // Return error
    }

В VS я получаю «ошибку постоянного значения» с просьбой заменить целые числа [n] и [m] постоянными значениями, но в Code: Blocks я не получаю ошибок вообще. Это работает в VS, когда я использую функцию malloc (), чтобы сначала выделить память для «tab», но мне было интересно, почему я не работаю так же, как в Code: Blocks.

1 Ответ

0 голосов
/ 17 ноября 2018

Вы объявляете variable-length array.Это особенность языка C в кодовых блоках с некоторыми компиляторами, которые поддерживают его как расширение.Visual Studio нет;

int n,m;
int main (){
printf("n");
scanf("%d", &n);
printf("m");
scanf("%d", &m);
int *tab[m]; 
for (i=0; i<m; i++) 
     tab[i] = (int *)malloc(n * sizeof(int));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...