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.

No se puede crear una cadena perezosa y no se puede acceder a la memoria.

Después de recibir un error de segmentación, el depurador me da un error que dice que no puedo acceder a la memoria en la dirección 0x1. También dice que no puede crear una cadena perezosa con la dirección 0x0 y una longitud distinta de cero. ¿Alguien sabe cómo puedo solucionar esto?

¡Gracias!

“`C++
#include <iostream>
#include <string>
#include "unorderedSet.h"

using namespace std;
int main()
{
int intArr[] = {12,23,4,7,12,9,10,6,23,11};

//El depurador señala aquí
string strArr[] = {"banana","apple","pear","grape",
"banana","fig","mango","orange","pear","guava"};

unorderedSet<int> intSet(20);
for (int i = 0; i < 10; i++)
{
intSet.insertEnd(intArr[i]);
}

unorderedSet<string> strSet(20);
for (int i = 0; i < 10; i++)
{
strSet.insertEnd(strArr[i]);
}

cout << "\nConjunto de enteros: " << intSet << endl;
cout << "Conjunto de cadenas: " << strSet << endl;

intSet.insertAt(5,30);

cout << "\nInsertar en posición no duplicada\nConjunto de enteros: " << intSet << endl;
intSet.insertAt(5,11);

cout << "Insertar en posición duplicada\nConjunto de enteros: " << intSet << endl;
strSet.replaceAt(1,"pineapple");

cout << "\nReemplazar en posición no duplicada\nConjunto de cadenas: " << strSet << endl;
strSet.replaceAt(3,"pear");

cout << "Reemplazar en posición duplicada\nConjunto de cadenas: " << strSet << endl;

int intArr1[] = {7,0,19,56,22,11,23,5};

//El depurador señala aquí
string strArr1[] = {"red","yellow","grape","banana","mango","orange","guava"};

unorderedSet<int> intSet1(20);
for (int i = 0; i < 8; i++)
{
intSet1.insertEnd(intArr1[i]);
}

unorderedSet<string> strSet1(20);
for (int i = 0; i < 7; i++)
{
strSet1.insertEnd(strArr1[i]);
}
“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que hay un intento de acceder a una memoria que es inválida o que no ha sido asignada. La dirección 0x1 y 0x0 son ejemplos de direcciones de memoria que comúnmente se asocian con errores de puntero nulo. Una posible razón para este error es un intento de acceder a un elemento de una matriz fuera de los límites de la matriz.

    En el código proporcionado, el depurador indica dos ubicaciones. La primera ubicación es donde se inicializa la matriz de cadenas strArr. Es posible que haya un intento de acceder a una memoria que no ha sido asignada mientras se inicializa strArr. Este error se puede solucionar verificando la longitud de las cadenas y asegurándose de que no sean nulas o vacías.

    La segunda ubicación es donde se inicializan las matrices de enteros y cadenas intArr1 y strArr1. Es posible que haya un intento de acceder a una memoria fuera de los límites de las matrices en el bucle que sigue. Este error se puede solucionar asegurándose de que los límites del bucle estén dentro de los límites de las matrices (es decir, el límite del bucle debe ser 8 para intArr1 y 7 para strArr1).

    En general, las fallas de segmentación y los errores de acceso a memoria se pueden solucionar examinando cuidadosamente el código y asegurándose de que la memoria se asigna correctamente, las matrices no se acceden fuera de sus límites y los punteros nulos se verifican adecuadamente.

Comments are closed.