Работа с памятью, выделенной malloc - C (СИ)
Формулировка задачи:
Доброго времени суток!
Есть следующая проблема:
Выделяем кусок памяти из кучи:
Есть функция, которая знает тип, для которого выделяли память, и может её индексировать:
И все это работает, до тех пор пока мы не обращаемся к памяти по индексу:
Однако, такой код
работает нормально.
Подскажите, пожалуйста, в какую сторону гуглить.
void *alloc(size_t size_of_elem, size_t count) { return malloc(size_of_elem * count); }
void *indexator(void *data, size_t index) { // функция дана для примера. Реальная знает размер выделенной памяти // и проводит проверку индекса. // Пусть, для примера, тип - int int *data_int = (int *)data; return (void *)&data[index] }
void f(void) { void *data = alloc(sizeof(int), 10); int *data_i = (int *)indexator(data, 5); int val = 5; *data_i = val; // это строчка крашит программу (Segmentation fault) }
void f(void) { int *data = (int *)malloc(sizeof(int) * 10); int val = 5; *(data + 5) = val; }
Решение задачи: «Работа с памятью, выделенной malloc»
textual
Листинг программы
void *indexator(void *data, size_t index) { int *data_int = (int *)data; return data_int + index; }
Объяснение кода листинга программы
- В функции indexator(void *data, size_t index) происходит работа с памятью, выделенной с помощью malloc.
- Переменная data является указателем на выделенную память.
- Переменная index содержит индекс, по которому необходимо получить доступ к памяти.
- При помощи приведения типа (int )data_int = (int )data происходит преобразование указателя data в указатель типа int *.
- Возвращаемое значение data_int + index является адресом элемента памяти, к которому необходимо получить доступ.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д