es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error de segmentación causado por repetir pop_back() y push_back()

Al ejecutar el siguiente código en Clion (un IDE) con c++11, me encontré con un fallo de segmentación. Pero si borro la declaración if, agrego un else antes de pop_back, elimino push_back o elimino pop_back (hacer cada uno por separado), entonces no habrá error. ¿Por qué hay un fallo de segmentación y por qué hacer cualquiera de los cambios anteriores eliminaría el error?

#include "vector"

using namespace std;

int main() {
    vector<int> test;
    for (int i = 0; i < 10000; i++) {
        if (i % 2 == 0)
            test.push_back(i);
        test.pop_back();
    }
}

Editar: Algunas personas dicen que es porque hay un pop_back de un vector vacío, pero si quito push_back no habrá ningún problema (incluso si pusheo algunos elementos antes del loop).

Tags:  ,

Answer

  1. Avatar for davy.ai

    El error de segmentación ocurre en este código debido a que se llama a la línea test.pop_back() en un vector vacío. Esto significa que el vector no tiene elementos que remover, provocando un error de segmentación.

    Cuando se elimina la instrucción if, el programa solo llama a pop_back() una vez, lo cual ocurre antes de que se añadan elementos al vector. Esto significa que no hay elementos que remover y por lo tanto, no ocurre ningún error de segmentación.

    Agregar un else antes de la instrucción pop_back() evita que se llame a pop_back() si la condición de la instrucción if es falsa, evitando que el vector esté vacío y causando un error de segmentación.

    Eliminar la instrucción push_back() significa que no se están agregando elementos al vector, por lo que cuando se llama a pop_back(), no hay elementos que remover y por lo tanto, no ocurre ningún error de segmentación.

    En resumen, el error de segmentación ocurre porque se llama a pop_back() en un vector vacío, y las diferentes modificaciones al código evitan que el vector esté vacío y cause un error de segmentación.

Comments are closed.