Общая динамическая память для разных функций - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Ниже код, ожидал, что адреса будут одинаковые, но это не так, хочу выделить память в одной функции, а использовать в другой.
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. void mema(int* c,void* p)
  4. {
  5. *c=10;
  6. p=malloc(*c);
  7. printf("address=%p\n",p);
  8. }
  9. int main()
  10. int c;
  11. void* p;
  12. mema(&c,p);
  13. printf("address=%p\n",p);
  14. free(p);
  15. return 0;
  16. }
Пропущенная скобка после строки с main суть не меняет.

Решение задачи: «Общая динамическая память для разных функций»

textual
Листинг программы
  1. int* mema(int* c)
  2. {
  3.     *c=10;
  4.     int* p=malloc(*c*sizeof(int));
  5.     return p;
  6. }
  7.  
  8. int main()
  9. {
  10.     int c;
  11.     void* p;
  12.     p=mema(&c);
  13.     printf("address=%p\n",p);
  14.  
  15.     free(p);
  16.     return 0;
  17. }

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

  1. В функции mema выделяется динамическая память с помощью malloc с указанием размера памяти в *c элементов.
  2. В функции main создается переменная типа int с именем c.
  3. В функции main вызывается функция mema с передачей адреса переменной c в качестве аргумента.
  4. В функции mema значение переменной c изменяется на 10.
  5. В функции main выводится адрес выделенной памяти с помощью функции printf.
  6. В функции main освобождается выделенная память с помощью функции free.
  7. В функции main возвращается 0, что означает успешный конец работы программы.

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


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

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

8   голосов , оценка 3.5 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы