| Casa | Hardware | Redes | Programación | software | Criticar | Sistemas |   
Programación  
  • C /C + + Programming

  • Lenguajes De Programación

  • Delphi Programación

  • Programación Java

  • JavaScript Programación

  • Programación PHP /MySQL

  • Perl Programming

  • Python Programming

  • Rubí Programación

  • Visual Basics Programación
  •  
    Conocimientos Informáticos >> Programación >> C /C + + Programming >> Content
    Cómo prevenir las pérdidas de memoria en C + +
    Una pérdida de memoria es un tipo de error de programación que se produce cuando un programa asigna más memoria de la que libera . De este modo , una aplicación puede quedarse sin memoria y hacer que el sistema se bloquee . Para evitar pérdidas de memoria , lo que necesita saber cuando se presentan con mayor frecuencia y ser consciente con el uso de la "nueva " y los operadores " delete " C + +. Cosas que necesitará
    Proficiency in C + +
    C + + compilador
    depurador y otras herramientas de software de investigación
    Ver Más instrucciones
    1

    entender los conceptos básicos de operador . El C + + operador "new " memoria heap asigna . El operador "delete " libera memoria heap. Por cada "nuevo ", se debe utilizar un "delete " para que se libera la misma memoria que asignan : .
    Char * str = new char [ 30 ] ; //Asignar 30 bytes para albergar una cadena < br > delete [ ] str //Borrar los 30 bytes y hacer str no apuntan a nada
    2

    Reasignar memoria sólo si se ha borrado . . En el código de abajo , str adquiere una nueva dirección con la segunda asignación . La primera dirección se pierde irremediablemente , al igual que los 30 bytes que apuntaban a . Ahora son imposibles a la libre , y usted tiene una pérdida de memoria : .
    Char * str = new char [ 30 ] ; //Dale str una dirección de memoria
    //delete [ ] str ; //Quitar el primer comentario que marca en esta línea para corregir
    str = new char [ 60 ], . . //Dale str otra dirección de memoria con el primero ha ido para siempre
    delete [ ] str ; //se elimina el 60 bytes , no solo los primeros 30 .
    3

    Ver las asignaciones de puntero. Cada variable dinámica ( la memoria asignada en el montón ) necesita ser asociado con un puntero . Cuando una variable dinámica se convierte en disociado de su puntero ( s ) , se hace imposible de borrar . Una vez más, esto se traduce en una pérdida de memoria :
    char * cadena1 = new char [ 30 ] ;
    char * cadena2 = new char [ 40 ] ;
    strcpy ( cadena1 , " pérdida de memoria ") ;
    str2 = cadena1 //Bad! Ahora, los 40 bytes son imposibles de libre
    delete [ ] str2 , . //Esto elimina los 30 bytes
    delete [ ] cadena1 , . //Posible violación de acceso . ¡Qué desastre !
    4

    Tenga cuidado con los punteros locales. Un puntero se declara en una función se le asigna en la pila, pero la variable dinámica que apunta se asigna en el montón. Si no se elimina, se va a persistir después el programa sale de la función: void
    Leak (int x ) {
    char * p = new char [ x ] ;
    //delete [ ] p , . //Eliminar el primer comentario que marca para corregir
    }
    5

    Preste atención a los corchetes después de " eliminar ". Utilice "delete " por sí mismo para liberar a un único objeto. Utilice "delete " [] con corchetes para liberar a un array montón. No hacer algo como esto :
    char * uno = new char ;
    delete [ ] se //Wrong
    char * Cuántas = new char [ 30 ] ;
    eliminar muchos ; //¡ Wrong

    Previous :

    next :
      Artículos relacionados
    ·Cómo obtener códigos para Dev- C + + 4.9.9.2 
    ·Cómo leer un documento de Word utilizando C 
    ·Cómo hacer una cadena C 
    ·¿Qué es la sintaxis de C + + 
    ·Cómo sobrecarga de una función en C + + 
    ·Cómo conseguir un Gridview Valor de la celda 
    ·Cómo programar juegos en C + + 
    ·Cómo hacer un archivo EXE en el Bloc de notas 
    ·Cómo mover un puntero de archivo en C + + 
    ·Cómo escribir una clase de cola en C + + 
      Artículos destacados
    ·Cómo actualizar una matriz de cadenas en Java dinámic…
    ·Cómo mostrar el contenido de una lista de matrices en …
    ·Cómo mostrar dos columnas en una columna DataGrid 
    ·Cómo: Acceso directo a MySQL en GoDaddy SSH 
    ·Puede Dreamweaver Editar PHP 
    ·Cómo seleccionar de un conjunto de datos en Visual Bas…
    ·Cómo crear un botón personalizado en PHP 
    ·Cómo calcular un total movimiento en JavaScript 
    ·Cómo crear una lista en Lisp Coding 
    ·Cómo crear procedimientos CLR 
    Copyright © Conocimientos Informáticos http://ordenador.wingwit.com