Вы находитесь на странице: 1из 17

EXPOSICIN TEMA 1 PROGRAMACIN

AVANZADA
MALLOC
Los variables y vectores en C ocupan un tamao
predefinido, no pueden variarlo durante la ejecucin del
programa.

Por medio de punteros se puede reservar o liberar
memoria dinmicamente, es decir, segn se necesite.
MALLOC
La funcin malloc sirve para solicitar un bloque de memoria
del tamao suministrado como parmetro. Devuelve un
puntero a la zona de memoria concedida:


void* malloc ( unsigned numero_de_bytes );


El tamao se especifica en bytes. Se garantiza que la zona
de memoria concedida no est ocupada por ninguna otra
variable ni otra zona devuelta por malloc.

Si malloc es incapaz de conceder el bloque (p.ej. no hay
memoria suficiente), devuelve un puntero nulo.

EJEMPLO DEL USO DE MALLOC

#include <stdlib.h>
int* ptr; /* puntero a enteros */
/* reserva hueco para 300 enteros */
ptr = (int*)malloc ( 300*sizeof(int) );

CALLOC
La funcin void * calloc (nitems size_t, tamao size_t) asigna
la memoria solicitada y devuelve un puntero a la misma.

Declaracin: void * calloc ( size_t nitems , size_t tamao )

Parmetros:
nitems - Es el nmero de elementos que deben asignarse.
tamao - Es el tamao de los elementos.

Valor devuelto:
Esta funcin devuelve un puntero a la memoria asignada, o NULL si
la peticin falla.



DIFERENCIAS ENTRE MALLOC Y CALLOC

Malloc() toma un nico argumento (la cantidad de
memoria para asignar en bytes), mientras calloc()
necesita dos argumentos (el nmero de variables para
asignar en la memoria y el tamao en bytes de una sola
variable).
Malloc() no inicializa la memoria asignada,
mientras calloc() inicializa todos los bytes del bloque de
memoria asignada a cero.

EJEMPLO DEL USO DE CALLOC
#include <stdio.h>
#include <stdlib.h>
Int main()
{
int n=4; // representa el nmero de elemntos
int *V;
V=(int*)calloc(n,sizeof(int)); // vector al que se le reserva
cuatro espacios de memoria de tipo entero

}

FREE
Cuando una zona de memoria reservada con malloc ya
no se necesita, puede ser liberada mediante la
funcin free.


void free (void* ptr);

ptr es un puntero de cualquier tipo que apunta a un rea de
memoria reservada previamente con malloc.

Si ptr apunta a una zona de memoria indebida, los
efectos pueden ser desastrosos, igual que si se libera
dos veces la misma zona.

REALLOC
La funcin realloc( ) proporciona un medio para
modificar el tamao de una porcin de memoria
designada.

Sintaxis
#include <stdlib.h>
void *realloc(void *bloque, size_t tamao );
Bloque es el apuntador que se encuentra al inicio del
espacio de memoria.
Tamao es el nmero total de bytes que se desea cambiar.



#include <stdio.h>
#include <stdlib.h>

int main()
{
char *str;
//localizacion incial de memoria
str= (char *) malloc(15);
strcpy(str,"programacion");
printf("string= %s, direccion= %d\n",str, str);

//relocalizacion de memoria
str= (char *) realloc(str,25);
strcat(str, " avanzada");
printf("\nstring= %s, direccion= %d\n",str, str);
free(str);
/*String = programacion, direccion = 3673440
String = programacion avanzada, direccion = 3673440*/
return 0;
}
NEW

El operador new permite a los programas la asignacin
dinmica de memoria.

Float* ptr= new float(3.14159);
Se inicializa a 3.14159 un objeto float recin asignado.


DELETE
La expresin ser normalmente un puntero, el
operador delete[] se usa para liberar memoria
de arrays dinmicos.

Es importante liberar siempre usando delete la memoria
reservada con new. Existe el peligro de prdida de
memoria si se ignora esta regla.

Cuando se usa el operador delete con un puntero nulo,
no se realiza ninguna accin. Esto permite usar el
operador delete con punteros sin necesidad de
preguntar si es nulo antes.


DELETE - SINTAXIS

[::]delete [<expresin>]
[::]delete[] [<expresin>]

Nota: los operadores new y delete son propios de C++.
En C se usan funciones, como malloc y free para
reservar y liberar memoria dinmica.
EJEMPLO:
Nota: f es un puntero que apunta a un puntero que a su
vez apunta a un float. Un puntero puede apuntar a
cualquier tipo de variable, incluidos otros punteros.

Este ejemplo nos permite crear arrays dinmicos de dos
dimensiones. La lnea (1) crea un array de 10 punteros
a float. La (2) crea 10 arraysde floats. El
comportamiento final de f es el mismo que si lo
hubiramos declarado como:
float f[10][10];
REFERENCIAS BIBLIOGRFICAS
http://www.tutorialspoint.com/c_standard_library/c_functi
on_calloc.htm
http://www.tutorialspoint.com/c_standard_library/c_functi
on_realloc.htm
http://es.wikipedia.org/wiki/Malloc
http://c.conclase.net/curso/?cap=013b
Zhang, Tony. Aprendiendo C. Pearson Educacin,
Mxico 2001.
Deitel & Deitel. Como programar en C/C++. Pearson
Educacin, Mxico 1994.

Вам также может понравиться