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.

Violación de segmento con el búfer char* en la función getline()

Obtengo un archivo de segmentación en el código siguiente.
Creo que la razón está en la línea 10 donde estoy usando char* buffer.
Quiero saber por qué es así.

¿Es porque la memoria en el buffer aún no está asignada?

Aquí está el código:

#include <iostream>
#include <fstream>

int main()
{
    const char* filename = "directorio de mi archivo";// mnt/c/Users/...
    std::fstream fin(filename,std::fstream::in);
    if(!fin.is_open())
        std::cout << "¡Opps!" << std::endl;
    char* buffer = NULL;//si char buffer[100] entonces sería bueno.
    while(!fin.eof())
    {
        fin.getline(buffer,100);
        std::cout << buffer << std::endl;
    }
    return 0;
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, la razón por la cual ocurre el error de segmentación se debe a que no se ha asignado memoria para la variable buffer. El buffer se declara como un puntero nulo en la línea 10, pero no se le asigna ninguna memoria antes de que se use en la línea 13 con getline(). Esto resulta en un comportamiento indefinido y puede causar un error de segmentación. Para solucionar esto, puedes asignar memoria para el buffer dinámicamente utilizando new o utilizar un array de tamaño fijo en su lugar. Por ejemplo, puedes reemplazar char* buffer = NULL por char buffer[100].

Comments are closed.