Week 4 - Section (Memory) Flashcards

(60 cards)

1
Q

¿Qué almacena específicamente una variable de tipo puntero en C?

A

Almacena la dirección de memoria de otra variable.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

¿Qué símbolo se utiliza en C para declarar que una variable es un puntero?

A

El asterisco ($*$).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

¿Qué operador se utiliza para obtener la dirección de memoria de una variable existente?

A

El operador ampersand ($\&$).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Si $p$ es un puntero a un entero, ¿qué sintaxis se usa para acceder al valor al que apunta?

A

$*p$

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

¿Qué ocurre técnicamente cuando se realiza la operación de desreferencia ($*p$)?

A

La computadora va a la dirección almacenada en $p$ y accede al valor en esa celda.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

¿Cómo se visualiza típicamente un puntero en diagramas de memoria?

A

Como una caja que contiene una dirección y una flecha que apunta a otra celda.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

¿Cuál es la forma correcta de definir un puntero que apunte a un carácter?

A

Usando el tipo char *.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

¿Por qué es importante recordar que el propio puntero también tiene una dirección de memoria?

A

Porque es una variable y ocupa su propio espacio en el sistema de memoria.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

¿Qué es un fallo de segmentación (segmentation fault)?

A

Un error que ocurre al intentar acceder a una parte de la memoria a la que no se tiene permiso.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

¿Qué es una fuga de memoria (memory leak)?

A

Ocurre cuando se reserva memoria y no se libera o cuando no se cierra un archivo usado.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

¿Cuál es el riesgo de usar funciones como malloc sin llamar a free después?

A

El programa puede agotar la memoria disponible, causando errores o bloqueos.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

¿Qué función de C permite abrir un archivo para lectura o escritura?

A

La función fopen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

¿Qué tipo de dato devuelve la función fopen?

A

Un puntero a un archivo, definido como FILE *.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

¿Por qué es obligatorio usar fclose después de trabajar con un archivo?

A

Para liberar recursos del sistema y evitar errores de memoria o corrupción de datos.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

¿Qué modo se debe pasar a fopen para abrir un archivo únicamente para lectura?

A

El modo "r" (read).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

¿Qué modo se utiliza en fopen para abrir un archivo con la intención de escribir en él?

A

El modo "w" (write).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

¿Para qué sirven los modos "rb" y "wb" en la apertura de archivos?

A

Para leer o escribir explícitamente archivos en formato binario.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

En la función fread, ¿cuál es el propósito del primer argumento?

A

Especificar la ubicación o variable (buffer) donde se almacenarán los datos leídos.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

En fread, ¿qué indica el argumento que utiliza la función sizeof?

A

El tamaño en bytes de cada bloque de datos que se desea leer.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

¿Qué especifica el tercer argumento de la función fread?

A

El número de bloques de datos que se quieren leer del archivo.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

¿Cuál es el cuarto y último argumento de la función fread?

A

El puntero al archivo (FILE *) desde el cual se extraerá la información.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

¿Qué es un “buffer” en el contexto de entrada/salida de archivos?

A

Un trozo de memoria temporal para almacenar datos mientras se procesan o transfieren.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

¿Cuál es la principal ventaja de leer datos en bloques pequeños usando un buffer?

A

Permite procesar archivos de tamaño desconocido sin agotar la memoria del sistema.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

¿Cómo se diferencia el primer argumento de fwrite respecto al de fread?

A

En fwrite, el primer argumento es el origen de los datos (de dónde se lee para escribir).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
¿Cuál es la función del último argumento en `fwrite`?
Indicar el archivo de destino donde se escribirán los datos del buffer.
26
¿Qué característica define al tipo de dato `uint8_t`?
Es un entero sin signo que ocupa exactamente $1$ byte ($8$ bits).
27
¿Por qué se prefiere `uint8_t` sobre un `int` estándar al manejar bytes individuales?
Porque el tamaño de un `int` puede variar según la máquina, mientras que `uint8_t` siempre es $1$ byte.
28
¿Cuántos bytes componen la firma inicial de un archivo PDF estándar?
$4$ bytes.
29
En el código de ejemplo, ¿qué secuencia de $4$ bytes identifica a un PDF?
La secuencia que representa los caracteres `%PDF`.
30
¿Qué sucede con el puntero de archivo interno después de una operación exitosa de `fread`?
Avanza automáticamente a la siguiente posición después de los bytes leídos.
31
¿Por qué es necesario verificar que el puntero devuelto por `fopen` no sea `NULL`?
Para asegurar que el archivo existe o se pudo abrir correctamente antes de usarlo.
32
¿Cuál es la función del argumento `argc` en la función `main`?
Indica la cantidad total de argumentos pasados por la línea de comandos.
33
¿Qué almacena el arreglo `argv` en un programa en C?
Almacena las cadenas de texto correspondientes a cada argumento de la línea de comandos.
34
Si un programa requiere un nombre de archivo como entrada, ¿en qué índice de `argv` se encuentra usualmente?
En `argv[1]`.
35
¿Por qué no se pueden comparar dos arreglos directamente usando el operador `==`?
Porque el operador compararía sus direcciones de memoria en lugar de sus contenidos.
36
¿Cuál es el método recomendado para comparar los contenidos de dos arreglos de bytes?
Iterar elemento por elemento usando un bucle y comparar cada posición individual.
37
En la práctica de detección de archivos, ¿qué significa un valor de retorno $0$ al final de `main`?
Indica que el programa se ejecutó y finalizó exitosamente.
38
¿Qué prefijo se usa en C para indicar que un número está en formato hexadecimal?
El prefijo $0x$.
39
Si `p` es un puntero a `x`, ¿qué efecto tiene la instrucción `*p = 2;`?
Cambia el valor almacenado en la variable `x` a $2$.
40
¿Qué utilidad tiene la función `sizeof` en la programación defensiva?
Obtiene el tamaño preciso de un tipo de dato sin importar la arquitectura de la máquina.
41
¿Qué es la "programación defensiva" según la sección?
Escribir código que verifique condiciones de error y entradas del usuario para evitar fallos inesperados.
42
¿Qué sucede si se intenta leer un archivo que no se ha abierto previamente con `fopen`?
Se producirá un error de ejecución o un fallo de segmentación al intentar usar un puntero inválido.
43
Concepto: Dirección de memoria.
Es un número hexadecimal que identifica la ubicación física de un dato en el hardware de memoria.
44
Concepto: Desreferenciación.
El acto de usar el operador $*$ para obtener el valor contenido en la dirección a la que apunta un puntero.
45
¿A qué se refiere el término "aritmética de punteros" de forma implícita cuando el cursor de un archivo se mueve?
Al cambio de la dirección de memoria a la que se apunta para leer los datos siguientes.
46
¿Cuál es la forma convencional de representar una dirección de memoria en la terminal?
Como un valor hexadecimal, por ejemplo $0x1A$.
47
¿Cuál es el riesgo de no cerrar un archivo (`fclose`) en un bucle que abre muchos archivos?
El sistema puede alcanzar el límite de archivos abiertos y fallar.
48
En el ejemplo del PDF, ¿por qué se retorna $1$ si los bytes no coinciden?
Para indicar al sistema operativo que el archivo no cumplió con el criterio esperado (no es un PDF).
49
En la expresión `int *p = &x;`, ¿cuál es el tipo de la variable `p`?
Es de tipo puntero a entero (`int *`).
50
¿Qué información oculta se revela al estudiar `char *` en lugar de `string`?
Que las cadenas de texto son en realidad direcciones de memoria del primer carácter.
51
Si se desea modificar una variable original dentro de una función, ¿qué se debe pasar a la función?
El puntero (dirección de memoria) de esa variable.
52
¿Qué sucede si se intenta abrir un archivo que no existe con el modo `"r"`?
`fopen` devolverá un puntero `NULL`.
53
En el contexto de bytes, ¿qué valor decimal representa el hexadecimal $0x25$?
El número $37$ (aunque en el contexto de PDF es el carácter `%`).
54
¿Por qué se utiliza el tipo `uint8_t` para comparar firmas de archivos?
Porque las firmas se definen byte por byte y este tipo garantiza la precisión de un byte.
55
¿Cuál es la relación entre un archivo y el tipo `FILE` en C?
`FILE` es una estructura de datos que contiene la información necesaria para manejar el flujo del archivo.
56
¿Qué significa que los punteros hagan que el entorno sea "menos controlado"?
Que el programador tiene la responsabilidad directa de gestionar la memoria, aumentando el riesgo de errores manuales.
57
¿Qué operador se usa para acceder a la dirección de una variable para asignarla a un puntero?
El operador $\&x$.
58
¿Cuál es la función del segundo argumento en `fwrite`?
Definir el tamaño de cada elemento individual que se va a escribir en el archivo.
59
En un sistema de $32$ o $64$ bits, ¿qué garantiza que `fread` sea portable entre ambos?
El uso consistente de `sizeof` para determinar el tamaño de los tipos de datos.
60
¿Qué sucede con el contenido de un archivo si se abre con `fopen` en modo `"w"`?
El contenido previo se borra por completo y el archivo comienza vacío.