Ошибка доступа к памяти при работе со структурами - 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, выделенных в памяти.