|
|
| 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]] esta operación se realiza utilizando las funciones de la librería <span style="color:green; display=block"><stdio.h></span> '''malloc''', '''realloc''' y '''free'''.
| |
| − |
| |
| − | Ejemplo:
| |
| − |
| |
| − | <div style="background-color: #e9e9e9; border:solid 1px #bcbcbc">
| |
| − | <syntaxhighlight lang="cpp">
| |
| − |
| |
| − | #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;
| |
| − | }
| |
| − | </syntaxhighlight>
| |
| − | </div>
| |
| − |
| |
| − | Note que podemos llamar a '''free''' incluso si el puntero es NULL.
| |
| − |
| |
| − | == Arreglos y punteros ==
| |