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

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

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

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

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

textual
Листинг программы
int* mema(int* c)
{
    *c=10;
    int* p=malloc(*c*sizeof(int));
    return p;
}
 
int main()
{ 
    int c;
    void* p;
    p=mema(&c);
    printf("address=%p\n",p);
 
    free(p);
    return 0;
}

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

  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
Похожие ответы