Общая динамическая память для разных функций - 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;
}
Объяснение кода листинга программы
- В функции
memaвыделяется динамическая память с помощьюmallocс указанием размера памяти в*cэлементов. - В функции
mainсоздается переменная типаintс именемc. - В функции
mainвызывается функцияmemaс передачей адреса переменнойcв качестве аргумента. - В функции
memaзначение переменнойcизменяется на 10. - В функции
mainвыводится адрес выделенной памяти с помощью функцииprintf. - В функции
mainосвобождается выделенная память с помощью функцииfree. - В функции
mainвозвращается 0, что означает успешный конец работы программы.