Red de conocimiento informático - Computadora portátil - En lenguaje C, lo gratuito libera una estructura, pero ¿los punteros que contiene siguen siendo accesibles?

En lenguaje C, lo gratuito libera una estructura, pero ¿los punteros que contiene siguen siendo accesibles?

La función gratuita en realidad no libera memoria. \x0d\En primer lugar, debe comprender que la memoria es administrada por el sistema operativo (las operaciones incluyen asignación, liberación, etc.). \x0d\La memoria del sistema se divide en muchos bloques según el mecanismo de asignación de memoria del lenguaje C. El código subyacente de C está representado por el fragmento de estructura de datos. Hay un bit de bandera en el fragmento para indicar si el bloque de memoria está pendiente de asignación o asignado. Cada vez que se llama a malloc, este indicador se establecerá en 1 (parece ser 1, no lo recuerdo claramente), y cuando se llama a free, se establecerá en 0. El mecanismo de administración de memoria del sistema operativo asignará y liberará memoria en función de este valor. \x0d\Es decir, cuando se llama a free, este indicador solo se establece (por supuesto, también hace otras cosas, en lo que respecta a tu pregunta, solo se discute esto), y la memoria permanece allí desbloqueada. Entonces, cuando acceda a esta dirección nuevamente antes de que el sistema libere esta memoria, obtendrá el resultado que desea. \x0d\ Descripción, "Salida test1-gt; a es 0". La razón de esto puede ser que cuando está libre, al configurar el bit de bandera del bloque de fragmentos, el valor de a se sobrescribe. En la estructura de datos fragmentados, los primeros 8 bits del primer byte son bits de bandera y los siguientes 24 bits también tienen sus propios usos. Si está interesado en saber qué causa específicamente que el valor de a sea 0, puede estudiarlo usted mismo. Puede leer el código fuente glibc de Linux. \x0d\"(*test1-gt; next).a es 10", es simple. La "cabeza" de la memoria ocupada por la siguiente prueba de estructura de desplazamiento está muy lejos. Algunas operaciones de configuración de valores durante la liberación no se ven afectadas. Se puede acceder al valor de este puntero y test0 aún se conserva por completo en la pila de funciones. acceder a él. \x0d\ \x0d\P.S c/C's malloc/free y new/delete tienen esta característica, por lo que debes desarrollar un buen hábito al programar al llamar a free y eliminar, debes asignar el puntero a NULL, como: \x0d. \free(ptr);\x0d\ptr=NULL;\x0d\o\x0d\delete ptr;\x0d\ptr=NULL;