Вылет при использовании динамической памяти - C (СИ)
Формулировка задачи:
Доброго времени суток, у меня возникла проблема с одной задачей:
Дана матрица mx[a][b], числа "а" и "ь" - любые целые числа. Вывести матрицу на экран.
Вот код, но в чем проблема я определить немогу, т.к. компилятор не ругаеться вообще, а при запуске программы сходу выбивает: "Исключение unknoen software exception(0x00000fd) в приложении по адресу 0x00402853. Подскажите пожалуйста, в чем проблема.
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int main()
{
int a,b,i,j,n;
int **mx[i][j];
printf("vvedite rozmernost matritsi");
scanf("%i\n", &a);
scanf("%i\n", &b);
n=a*b;
mx[i][j]=(int**)malloc(n*sizeof(int**));
for(i=0;i<a;i++)
{
for(j=0;j<b;j++)
{
mx[i][j]=(i*a)+j+1;
printf("%i", mx[i][j]);
}
printf("\n");
}
return 0;
getch();
}Решение задачи: «Вылет при использовании динамической памяти»
textual
Листинг программы
int a, b, i, j;
scanf("%d%d", &a, &b);
int mx[a][b];
for ( i = 0; i < a; i++)
for (j = 0; j < b; j++)
{
scanf("%d", &mx[i][j])
}
Объяснение кода листинга программы
- Объявляются переменные
a,b,i,jтипа int - С помощью функции scanf() вводится значение для переменных
aиbи сохраняется в соответствующих переменных - Создается массив
mxдинамического размераaна основе переменнойbс помощью оператора new - В цикле for, который выполняется
aраз, в цикле for, который выполняетсяbраз, считывается значение в массивmxс помощью функции scanf() - Поскольку ввод данных осуществляется с помощью функции scanf(), то предполагается, что пользователь вводит данные, и программа ожидает ввода данных в соответствии с размером массива
mx - Если пользователь вводит данные, которые не соответствуют размеру массива
mx, то программа может выдать неопределенное поведение или вызвать ошибку - Если пользователь вводит данные, которые превышают размер массива
mx, то программа может выдать неопределенное поведение или вызвать ошибку - Если массив
mxне был удален с помощью оператора delete, то будет утечка памяти