Ошибка доступа к памяти при работе со структурами - C (СИ)
Формулировка задачи:
Задача состоит следующая создать динамический массив.
Т.е кол-во элементов в строках может быть разной.
Я решил немного по тренироваться и создал 2 структуры:
1) Столбец, который указывает на строчку
2)Строка
Почему-то при попытке присвоить появляется ошибка доступа к памяти... В чем может быть проблема?
Листинг программы
- #pragma hdrstop
- #pragma argsused
- #include <stdio.h>
- #include <malloc.h>
- #ifdef _WIN32
- #include <tchar.h>
- #else
- typedef char _TCHAR;
- #define _tmain main
- #endif
- struct Matrix{
- int n;
- struct Line *l;
- };
- struct Line{
- int m;
- int *num;
- };
- int _tmain(int argc, _TCHAR* argv[])
- {
- struct Matrix M;
- M.n=5;
- M.l=malloc(M.n*sizeof(struct Line));
- M.l[0].m=5;
- M.l[0].num=(M.l[0].m*sizeof(int));
- M.l[0].num[0]=10;
- }
Решение задачи: «Ошибка доступа к памяти при работе со структурами»
textual
Листинг программы
- M.l=(struct Line *)malloc(M.n*sizeof(struct Line));
Объяснение кода листинга программы
- В данном коде используется оператор
=
для присваивания значения переменнойM.l
. - Значение переменной
M.l
получается с помощью функцииmalloc
, которая выделяет память для нового блока памяти. - В качестве аргумента функции
malloc
используется выражениеM.n*sizeof(struct Line)
, которое вычисляет размер памяти, необходимый для храненияM.n
структур типаstruct Line
. - Значение переменной
M.n
представляет собой количество структур, которые будут выделены в массиве. - Переменная
M.l
будет содержать указатель на начало блока памяти, выделенного с помощью функцииmalloc
. - После выполнения данного кода, переменная
M.l
будет указывать на начало массива структурstruct Line
, выделенных в памяти.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д