Ошибка доступа к памяти при работе со структурами - 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));

Объяснение кода листинга программы

  1. В данном коде используется оператор = для присваивания значения переменной M.l.
  2. Значение переменной M.l получается с помощью функции malloc, которая выделяет память для нового блока памяти.
  3. В качестве аргумента функции malloc используется выражение M.n*sizeof(struct Line), которое вычисляет размер памяти, необходимый для хранения M.n структур типа struct Line.
  4. Значение переменной M.n представляет собой количество структур, которые будут выделены в массиве.
  5. Переменная M.l будет содержать указатель на начало блока памяти, выделенного с помощью функции malloc.
  6. После выполнения данного кода, переменная M.l будет указывать на начало массива структур struct Line, выделенных в памяти.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.75 из 5
Похожие ответы