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">
  
//Clona una cadena de caracteres y retorna
 
//un puntero a la nueva cadena.
 
 
#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.
+
      char *mem_dinamica;                        //Puntero al espacio a reservar.
  size_t str_len;                            //Tamaño de la cadena que se quiere clonar.
+
      size_t str_len;                            //Tamaño de la cadena que se quiere clonar.
  
  str_len = strlen(src);                    //Determinamos el tamaño de la cadena.
+
      str_len = strlen(src);                    //Determinamos el tamaño de la cadena.
  mem_dinamica = (char*)malloc(str_len+1);  //Reservamos el espacio + caracter '\0'.
+
      mem_dinamica = (char*)malloc(str_len+1);  //Reservamos el espacio + caracter '\0'.
  if( mem_dinamica != NULL){                //Comprobamos que se reservara el espacio.
+
      if( mem_dinamica != NULL){                //Comprobamos que se reservara el espacio.
      strcpy(mem_dinamica, src);              //Copiamos la cadena.
+
        strcpy(mem_dinamica, src);              //Copiamos la cadena.
  }
+
      }
  return mem_dinamica;                      //Retornamos el puntero a la nueva cadena.
+
      return mem_dinamica;                      //Retornamos el puntero a la nueva cadena.
 
}
 
}
  
  
 
int main(){
 
int main(){
 
+
      char *str1 = NULL;
  return 0;
+
      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>
</syntaxhighlight>
+
 
 +
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.