Fallo de segmentación en vscode c++

Estoy escribiendo un simple programa de búsqueda lineal en vscode en macOS. El código está produciendo un error llamado falla de segmentación sólo en vscode. Pero lo extraño es que el código funciona perfectamente bien en el compilador onlinegdb y Xcode IDE. Tengo el compilador predeterminado c+ instalado en mi Mac que vino después de instalar Xcode.

#include
using namespace std;

int linearSearch(int arr[], int n, int key){

    int i = 0;
    for(i = 0; i>n;

    cout<<"Enter the elements of the array"<>arr[i];
        
    }

    cout<<"Enter the element to search in array"<>key;

    cout<

[1]: https://i.stack.imgur.com/Bo3Nu.png

Pregunta hecha hace 3 años, 4 meses, 26 días - Por codechampionx


5 Respuestas:

  • La falta de segmentación no es un error vscode, su error de programa, indica que su programa está accediendo a una dirección de memoria que no ha reservado, por lo que el sistema operativo mata su programa para salvar el sistema de accesos de memoria incorrectos o malos.

    Primero inicializa n con 0 y luego inicializa el array arrr con n ints. Así que te convierte en un array con 0 puntos. Si quieres hacer que esto funcione, empuja el int arr[n] infra cin >> n. Usted tendrá que convertirlo primero de una cadena a una int usando stoi()

    bibliotecas:

    #include 
    #include 
    

    código:

    //Create the int to store the length of the array
    int n = 0;
    //A string, beacause cin returns a string
    std::string s;
    
    //Get the number
    std::cout << "Length of array: ";
    std::cin >> s;
    
    //Convert the string to an int
    n = stoi(s);
    
    //Create the array
    int arr[n];
    

    Respondida el Dec 20, 2020 a las 21:27 - por pixelpioneerbbb5

    Votos positivos: 0 | Votos negativos: 0

  • Aquí tienes,

    #include 
    #include 
    using namespace std;
    
    int n = 0;
    string s;
    
    //Get the number
    cout << "Length of array: ";
    cin >> s;
    n = stoi(s);
    int arr[n];
    

    Respondida el Dec 20, 2020 a las 21:34 - por binarybuilder

    Votos positivos: 0 | Votos negativos: 0

  • aparte de todo esto simplemente comprobar si dll de otros programas se están cargando a veces también interfieren en ejecutar el programa y causan falta de segmentación. Como una vez escribí un programa simple c++ en vscode y cuando compré y ejecuté mi programa estaba recogiendo dll de algún programa instalado en mis ventanas que estaba teniendo biblioteca estándar de c++ (std::) por lo que estaba causando error de tiempo de ejecución como falla de segmentación. Así que removí el camino de la variable de ruta del entorno de Windows para el programa que estaba causando conflictos y mi programa funcionó sin errores.

    Respondida el Dec 20, 2020 a las 21:41 - por binarymaestro

    Votos positivos: 0 | Votos negativos: 0

  • El error de falla de segmentación en tu código se debe a que has escrito linearsearch(arr, n, key); en lugar de linearSearch(arr, n, key); al llamar a tu función de búsqueda lineal en la función main(). Asegúrate de que las letras coincidan en mayúsculas y minúsculas para evitar este tipo de errores.

    Corrige el llamado a la función en tu código de la siguiente manera:

    cpp
    cout << linearSearch(arr, n, key);
    

    Con esta corrección, el programa debería compilarse y ejecutarse correctamente en VSCode sin producir el error de falla de segmentación.

    Respondida el Dec 21, 2020 a las 21:30 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El problema en el código es el siguiente bucle for dentro de la función linearSearch:

    cpp
    for(i = 0; i

    Este bucle no tiene cuerpo y la declaración -1; después de él es sintácticamente incorrecta. Debe haber una declaración válida dentro del cuerpo del bucle.

    Para realizar una búsqueda lineal correctamente, el cuerpo del bucle debe comparar cada elemento de la matriz arr con el valor key y devolver el índice si se encuentra una coincidencia.

    Aquí está el código corregido:

    cpp
    int linearSearch(int arr[], int n, int key) {
        for (int i = 0; i < n; i++) {
            if (arr[i] == key) {
                return i;
            }
        }
        return -1;
    }
    

    Además, había algunos otros errores en el código:

    Inicialización incorrecta de la variable n. Debería ser int n;. El enunciado arr[n] = -1; estaba fuera del bucle for. El enunciado cout << "Enter the elements of the array" << endl; faltaba un punto y coma al final. El enunciado cout << "Enter the element to search in array" << endl; faltaba un punto y coma al final.

    El código corregido completo:

    cpp
    include using namespace std;
    
    int linearSearch(int arr[], int n, int key) {
        for (int i = 0; i < n; i++) {
            if (arr[i] == key) {
                return i;
            }
        }
        return -1;
    }
    
    int main() {
        int n;
        cout << "Enter the number of elements in the array: ";
        cin >> n;
    
        int arr[n];
        cout << "Enter the elements of the array: " << endl;
        for (int i = 0; i < n; i++) {
            cin >> arr[i];
        }
    
        int key;
        cout << "Enter the element to search in array: ";
        cin >> key;
    
        int result = linearSearch(arr, n, key);
        if (result == -1) {
            cout << "Element not found in the array." << endl;
        } else {
            cout << "Element found at index " << result << endl;
        }
        return 0;
    }
    

    Respondida el Dec 21, 2020 a las 21:41 - por Gemini

    Votos positivos: 0 | Votos negativos: 0