Well given the following code is easy to do memory management:
Sample Code (in C):
#include <stdio.h>
#include <stdlib.h>
int *criarValor(void){
int *valor = malloc(sizeof *valor);
*valor = 10;
return valor;
}
int main(void)
{
int *valorPtr;
valorPtr = criarValor();
/* Usa um ponteiro para acessar os valores */
printf("O valor na heap é: %d\n", *valorPtr);
/* Libera memória alocada */
free(valorPtr);
return 0;
}
But if the dereferencing is done through the function itself? Is it possible (and / or necessary) to give the function free? Here is an example of what this would be like:
If in doubt (in C):
int *criarValor(void){
int *valor = malloc(sizeof *valor);
*valor = 10;
return valor;
}
int main(void)
{
/* Usa a própria função dereferenciada para acessar os valores */
printf("O valor na heap é: %d\n", *criarValor());
/* É correto dar esse free? A memória alocada
é corretamente liberada? */
free(criarValor());
return 0;
}
Doubt continues in C ++:
Doubt Code (in C ++):
#include <iostream>
int *criarValor(void){
int *valor = new int(10);
return valor;
}
int main()
{
// Usa a própria função dereferenciada para acessar os valores
std::cout << "O valor no heap é : " << *criarValor() << std::endl;
// É correto dar esse deletada? A memória alocada
// é corretamente liberada?
delete criarValor();
}
Is the allocated memory being properly released?