Diferencia entre revisiones de «Usuario:Cstaff/Zona de pruebas»
| Línea 1: | Línea 1: | ||
=Esta es una zona de pruebas= | =Esta es una zona de pruebas= | ||
| + | |||
| + | Somos responsables de liberar cualquier espacio que reservemos dinámicamente una vez que dejemos de usarlo. | ||
==== En C ==== | ==== En C ==== | ||
| − | En [[C]] esta operación se realiza utilizando las funciones de la librería stdio.h '''malloc''', '''realloc''' y '''free'''. | + | En [[C]] esta operación se realiza utilizando las funciones de la librería <stdio.h> '''malloc''', '''realloc''' y '''free'''. |
Ejemplo: | Ejemplo: | ||
| Línea 9: | Línea 11: | ||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
| − | |||
| − | |||
#include <string.h> | #include <string.h> | ||
#include <stdio.h> | #include <stdio.h> | ||
| + | //Clona una cadena de caracteres y retorna | ||
| + | //un puntero a la nueva cadena. | ||
char *strclone(char *src){ | char *strclone(char *src){ | ||
| − | + | char *mem_dinamica; //Puntero al espacio a reservar. | |
| − | + | size_t str_len; //Tamaño de la cadena que se quiere clonar. | |
| − | + | str_len = strlen(src); //Determinamos el tamaño de la cadena. | |
| − | + | mem_dinamica = (char*)malloc(str_len+1); //Reservamos el espacio + caracter '\0'. | |
| − | + | if( mem_dinamica != NULL){ //Comprobamos que se reservara el espacio. | |
| − | + | strcpy(mem_dinamica, src); //Copiamos la cadena. | |
| − | + | } | |
| − | + | return mem_dinamica; //Retornamos el puntero a la nueva cadena. | |
} | } | ||
int main(){ | int main(){ | ||
| − | + | char *str1 = NULL; | |
| − | + | char str2 = "Hola Mundo"; | |
| + | |||
| + | str1 = strclone(str2); | ||
| + | |||
| + | if(str1 != NULL){ | ||
| + | printf("La cadena clonada es: %s\n", str1); | ||
| + | }else{ | ||
| + | printf("Error: No se pudo clonar la cadena\n"); | ||
| + | } | ||
| + | |||
| + | free(str1); //Liberamos el espacio previamente reservado. | ||
| + | return 0; | ||
} | } | ||
| + | </syntaxhighlight> | ||
</div> | </div> | ||
| − | + | ||
| + | Note que podemos llamar a free incluso si el puntero es NULL. | ||
Revisión del 11:55 17 dic 2013
Esta es una zona de pruebas
Somos responsables de liberar cualquier espacio que reservemos dinámicamente una vez que dejemos de usarlo.
En C
En C esta operación se realiza utilizando las funciones de la librería <stdio.h> malloc, realloc y free.
Ejemplo:
#include <string.h>
#include <stdio.h>
//Clona una cadena de caracteres y retorna
//un puntero a la nueva cadena.
char *strclone(char *src){
char *mem_dinamica; //Puntero al espacio a reservar.
size_t str_len; //Tamaño de la cadena que se quiere clonar.
str_len = strlen(src); //Determinamos el tamaño de la cadena.
mem_dinamica = (char*)malloc(str_len+1); //Reservamos el espacio + caracter '\0'.
if( mem_dinamica != NULL){ //Comprobamos que se reservara el espacio.
strcpy(mem_dinamica, src); //Copiamos la cadena.
}
return mem_dinamica; //Retornamos el puntero a la nueva cadena.
}
int main(){
char *str1 = NULL;
char str2 = "Hola Mundo";
str1 = strclone(str2);
if(str1 != NULL){
printf("La cadena clonada es: %s\n", str1);
}else{
printf("Error: No se pudo clonar la cadena\n");
}
free(str1); //Liberamos el espacio previamente reservado.
return 0;
}
Note que podemos llamar a free incluso si el puntero es NULL.