option
Cuestiones
ayuda
daypo
buscar.php

PEL - Tema 2

COMENTARIOS ESTADÍSTICAS RÉCORDS
REALIZAR TEST
Título del Test:
PEL - Tema 2

Descripción:
Estructuras lineales

Fecha de Creación: 2025/07/14

Categoría: Informática

Número Preguntas: 45

Valoración:(0)
COMPARTE EL TEST
Nuevo ComentarioNuevo Comentario
Comentarios
NO HAY REGISTROS
Temario:

¿Cuál es una ventaja clave del esquema LIFO de la pila del usuario en arquitecturas x86-64?. Permite almacenar más datos que la memoria libre. Su crecimiento es aleatorio y distribuido. Su comportamiento es predecible, y se beneficia del uso de la caché. Asegura que todas las variables locales se destruyan manualmente.

¿Qué instrucción genera un stack overflow en la pila del usuario?. std::cout << *p; con p = nullptr;. new int[1e9];. Recursión infinita o uso de arrays locales enormes. delete[] p; en puntero no inicializado.

¿Qué ocurre al ejecutar int* p; std::cout << *p; sin inicializar p?. Se imprime 0. El valor depende del sistema operativo. Se produce comportamiento indefinido. El compilador lanza una excepción.

¿Cuál de estas expresiones garantiza una lectura segura de un array con control de límites? std::array<int,4> m = {1, 2, 3, 4}; int x = ?. x = m[5];. x = m.at(5);. x = m.at(2);. x = *(m + 2);.

¿Qué representa int const* p?. Un puntero constante a un entero modificable. Un entero constante al que no se puede acceder. Un puntero a un entero constante (se puede leer pero no modificar). Un puntero que puede ser reasignado pero no desreferenciado.

¿Qué diferencia existe entre int const* p y int* const p?. Ambas son equivalentes. La primera no permite cambiar el puntero; la segunda sí. La primera impide modificar el contenido; la segunda, la dirección. Ambas permiten modificar tanto dirección como valor.

¿Qué hace esta instrucción delete p; si p apunta a un objeto válido?. Libera memoria sin llamar al destructor. Llama al destructor y libera memoria. Solo llama a operator delete. Libera la pila y no la memoria libre.

¿Cuál es el resultado de este fragmento si no hay excepciones? X* p = new X[3]; // ... delete[] p;. Llama al destructor de un solo elemento. No llama al destructor porque es un array. Llama a los tres destructores en orden inverso y libera la memoria. Elimina el puntero pero no los objetos.

¿Qué provoca una std::bad_alloc en C++?. Invocar delete a un puntero nulo. Usar nullptr en una operación aritmética. Fallo al intentar asignar memoria con new. Acceder fuera de los límites de un std::array.

¿Qué hace este fragmento? Student* p = new Student[100]; p[4].grade_1 = 10.0;. Causa error al acceder fuera de los límites. Modifica la nota del estudiante en la posición 4. Intenta acceder al puntero como si fuera doble. Reasigna el puntero p al nuevo valor.

¿Cuál es la consecuencia de no invocar delete sobre punteros dinámicos?. La variable queda inutilizable. El programa termina sin errores. Se produce una fuga de memoria (memory leak). El puntero apunta a nullptr automáticamente.

¿Qué representa operator new(sizeof(X)) en una expresión new X?. Asigna memoria y construye el objeto. Inicializa el puntero X*. Solo reserva memoria sin inicializar el objeto. Invoca el destructor de X.

¿Qué estrategia ayuda a reducir la fragmentación de memoria libre?. Reservar memoria con malloc() en vez de new. Eliminar punteros en orden inverso. Reutilizar buffers en vez de crear/destruir repetidamente. Usar delete en funciones recursivas.

¿Cuál es el riesgo de lanzar excepciones dentro de un destructor?. Impide compilar el código. Las excepciones no se propagan desde los destructores. Podría evitar que delete libere la memoria reservada. Las excepciones se almacenan en el heap.

¿Qué ventaja tiene p[4] sobre (*(p+4)).grade_1 o (p+4)->grade_1?. Permite modificar punteros sin aritmética. Es más rápida a nivel de compilación. Es más clara y segura para acceder a elementos. Invoca automáticamente el destructor al salir del bloque.

¿Cuál es el orden correcto de destrucción para los subobjetos en esta clase? class X : public BaseOne, public BaseTwo { Y y1_, y2_; public: ~X() { } };. BaseOne, BaseTwo, y1_, y2_. y1_, y2_, BaseOne, BaseTwo. y2_, y1_, BaseTwo, BaseOne. BaseTwo, BaseOne, y1_, y2_.

¿Cuándo finaliza el tiempo de vida de una variable con almacenamiento automático?. Al invocar su destructor explícitamente. Cuando se libera manualmente con delete. Al finalizar el programa. Al salir del ámbito en que fue definida.

¿Qué ocurre si se lanza una excepción dentro del destructor de un objeto que ya está siendo destruido por otra excepción?. Se ignora la excepción interna. El programa continúa normalmente. Se invoca std::terminate. El compilador emite un warning.

En este código, ¿cuál es el único objeto cuyo destructor NO se ejecuta? struct Z { Y y; Z() { throw Error{}; } ~Z() { std::cout << "Z destructor\n"; } };. y. z. Ninguno. Ambos se destruyen.

¿Qué ocurre si una excepción se lanza dentro de un constructor de clase y no es capturada localmente?. El objeto se construye parcialmente. Se ejecuta el destructor del objeto principal. Se invoca main() nuevamente. Se destruyen solo los subobjetos ya construidos.

¿Qué tipo de almacenamiento tiene esta variable? static X c{4};. Dinámico. Local automático. Estático. Global externo.

¿Qué garantía asegura que, si una operación falla, el programa queda en el mismo estado anterior a la operación?. Garantía básica. Garantía fuerte. Garantía nothrow. Garantía recursiva.

¿Cuál es el principal beneficio de la técnica RAII frente a bloques try-catch-finally?. Permite código compatible con C. Requiere menos código máquina. Automatiza la liberación de recursos con destructores. Permite lanzar múltiples excepciones simultáneamente.

¿Qué impresión generará este código antes de lanzar una excepción? X x1{1}; X x2{2}; throw Error{};. Se imprime solo el constructor de x1. Se imprimen ambos constructores. Solo se destruye x2. No se imprime nada antes del throw.

¿Qué afirmación sobre std::vector<T> en relación con RAII es correcta?. Solo libera memoria si se llama a .clear(). Utiliza destructores para liberar memoria al salir de ámbito. No puede usarse dentro de bloques try. No permite construir elementos con new.

¿Cuál es el propósito principal del destructor ~Dynarray() en la clase Dynarray<T> del ejemplo?. Iniciar la asignación de memoria. Generar excepciones en caso de error. Liberar la memoria asignada dinámicamente. Liberar la memoria asignada dinámicamenteInicializar el puntero a nullptr.

¿Por qué esta función no es segura ante excepciones? void arrayTest(std::size_t n) { double* p = new double[n]; // operaciones... delete[] p; }. Porque no se inicializa p. Porque delete[] se ejecuta antes de new. Porque si hay una excepción antes de delete[], habrá fuga de memoria. Porque new requiere punteros const.

¿Qué ventaja tiene encapsular new/delete dentro de un objeto RAII como Dynarray<T>?. Aumenta el rendimiento mediante malloc(). Permite acceder directamente a direcciones físicas. Garantiza que la memoria se libere siempre, con o sin excepción. Permite compilar código C como si fuera C++.

¿Qué operador de C++ se invoca para lanzar una excepción?. throw. raise. try. emit.

¿Cuál es el resultado de este bloque si ocurre una excepción dentro de try? try { X x1{1}; X x2{2}; throw Error{}; } catch (...) { std::cout << "Catch block\n"; }. No se destruye ningún objeto. Solo se destruye x1. Se destruyen x2 y luego x1 antes del catch. Se imprime "Catch block" pero no se llama a destructores.

¿Cuál de las siguientes afirmaciones sobre archivos de texto es correcta?. Su acceso es siempre aleatorio. Se almacenan como flujos de bits con delimitadores binarios. Solo pueden contener caracteres ASCII simples. Pueden ser abiertos y editados con editores como Notepad.

¿Qué ventaja tienen los archivos binarios frente a los de texto cuando trabajamos con estructuras complejas?. Su contenido se puede leer directamente desde la consola. Son más seguros ante excepciones. Permiten leer o escribir múltiples campos a la vez con menos operaciones. Pueden editarse fácilmente fuera del programa.

¿Qué operador se recomienda usar para evitar errores al leer cadenas con espacios desde un archivo de texto?. >>. getline(). put(). get().

¿Qué modo de apertura utilizarías para añadir contenido al final de un archivo sin sobrescribirlo?. ios::in. ios::out. ios::binary. ios::app.

¿Qué ocurre si se intenta abrir un archivo inexistente con ifstream sin comprobar su estado?. El compilador lanza una advertencia. Se crea automáticamente el archivo. La variable del archivo se convierte en nula. Puede producir errores o comportamientos inesperados si no se comprueba.

¿Cuál es la diferencia clave entre fstream, ifstream y ofstream?. Solo fstream permite acceso binario. ifstream y ofstream no requieren cerrar el archivo. fstream permite tanto lectura como escritura. ofstream puede leer y escribir archivos de texto.

¿Qué ventaja tiene que el método close() esté en el destructor de fstream?. Permite cerrar archivos desde otras funciones. El archivo se cierra automáticamente al salir de ámbito. Permite reabrir el mismo archivo sin error. Evita tener que incluir <fstream>.

¿Por qué se usa reinterpret_cast al leer o escribir en archivos binarios?. Para convertir datos de binario a texto. Para saltarse el sistema de tipos de C++. Para interpretar una estructura como puntero a char. Porque read() y write() no funcionan sin casting.

¿Qué error común se evita al usar archivo.get(letra) en vez de archivo >> letra?. Lectura de letras minúsculas incorrectas. Pérdida de memoria en el buffer. Omisión de espacios en blanco y saltos de línea. Conversión errónea a binario.

¿Cuál es el resultado si no se cierra explícitamente un archivo en C++?. Se borra el contenido del archivo. Se produce una excepción. El destructor lo cerrará al salir del ámbito. Se bloquea el sistema operativo.

En la lectura secuencial de archivos binarios, ¿cuál es la condición correcta del bucle?. while (archivo.getline(...)). while (!archivo.eof()). while (archivo). while (archivo.good()).

¿Qué tipo de acceso permite modificar directamente una estructura en un archivo binario sin leer el contenido anterior?. Acceso aleatorio. Acceso secuencial. Acceso directo solo con ifstream. No es posible en C++.

¿Qué ocurre si se lee una estructura mayor a los bytes disponibles en el archivo binario?. Se lanza una excepción automáticamente. Se llena el resto con ceros. Puede corromper la memoria del programa. Se ignora la lectura y se repite automáticamente.

¿Por qué no es buena práctica usar while (!archivo.eof()) directamente para leer archivos?. Porque eof() se activa antes de que termine el archivo. Porque omite caracteres binarios. Porque no puede combinarse con getline(). Porque eof() solo funciona con archivos de texto.

¿Cuál es el principal inconveniente de los archivos binarios respecto a los de texto?. Requieren más espacio en disco. Solo pueden usarse en Windows. No pueden ser leídos por humanos sin software específico. No permiten almacenar estructuras.

Denunciar Test
Chistes IA