Попробуйте переместить некоторые данные в кучу C6262

Начинаю программировать на C в VS. Только знакомлюсь с массивами, поэтому возникла проблема. Суть программы при помощи функций заполнить массивы и отнять их друг от друга.

#include <stdio.h>
#include <math.h>
#include <locale.h>
#include <conio.h>

void zapolnenie(int Ar[50][50], int n, int m)
{
    int a, b;
    printf("\nЗаполните матрицу\n");
    for (a = 0; a < n; a++) for (b = 0; b < m; b++) scanf_s("%d", &Ar[a][b]);
   
}

void raznica(int C[50][50], int K[50][50], int L[50][50], int n, int m)
{
    int a, b;
    printf("\n\n\nC=A-B\n\n");
    for (a = 1; a < n; a++)    for (b = 0; b < m; b++)   C[a][b] = (K[a][b]) - (L[a][b]);
}

void vivod(int C[50][50], int n, int m)
{
    int a, b;
    for (a = 0; a < n; a++)
    {
        for (b = 0; b < m; b++) printf("%d ", C[a][b]);
        printf("\n");
    }
}

int main()
{
    setlocale(LC_ALL, "Rus");
        int n, m, a = 0, b = 0;
        int A[50][50], B[50][50], C[50][50];
        printf("\nВведите размерность двох матриц nxm\n");
        scanf_s("%d%d", &n, &m);
        zapolnenie(A, n, m);
        zapolnenie(B, n, m);
        raznica(C, A, B, n, m);
        vivod(C, n, m);
}

Выдает это: C6262 Функция использует "30016" байт в стеке: это превышает значение /analyze:stacksize"16384". Попробуйте переместить некоторые данные в кучу. +В консоли в первой строке массива выводит такой мусор: введите сюда описание изображения

Три дня провел в интернете в поиске решения, но так и не понял как в моем случае должен рабоать стек\указатели\куча. Возможно я неправильно понимаю и существование моей программы впринципе невозможно, но уже не могу найти сил на поиски решения, поэтому прошу у вас помощи, что сделать чтоб программа работала?


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

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

Анализатор пугает строка

int A[50][50], B[50][50], C[50][50];

которая требует — страшно подумать :) — 30 Кбайт стека. При том, что по умолчанию там 1 МБайт.

Поскольку динамическое выделение памяти — большая отдельная тема, вы можете успокоить анализатор, перенеся строку из функции main за ее пределы:

        printf("\n");
    }
}

int A[50][50], B[50][50], C[50][50];  // <--- вот сюда

int main()
{
    setlocale(LC_ALL, "Rus");
        int n, m, a = 0, b = 0;
        printf("\nВведите размерность двох матриц nxm\n");

Это вполне устоит анализатор...

Второй способ — с помощью опции командной строки типа /analyze:stacksize64000 (64000 — предлагаемый размер стека) пояснить ему, что стека хватит. Он и не пикнет :)

→ Ссылка