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.

Fallo de segmentación con la clase Binary Heap al ejecutar en Linux, problemas al insertar en el heap.

He implementado una clase de arreglo binario en C++ para la escuela. Estoy teniendo problemas con el programa al ejecutarse en el servidor Linux de la escuela. Mi código se ejecuta correctamente al 100% en mi Mac. Parece que se produce un SegFault después de imprimir la primera línea de código desde main.cpp. He intentado usar GDB y no he podido encontrar el problema. Al ejecutar GDB, obtengo el siguiente problema: El programa recibió la señal SIGSEGV, Violación de segmento. 0x00007ffff7ae8d68 en std::string::assign(std::string const&). Cualquier ayuda para corregir esto sería muy apreciada.

EDIT:
Descubrí que la función insert es la que causa los problemas: He actualizado la función de la siguiente manera:

Función de inserción ACTUALIZADA:

template
void Heap::insert(typ k) {
if (size == 0) {
size = size + 1;
heap[size] = k;
return;
}
if (size == cap-1) {
cap = cap * 2;
typ *tempHeap = new typ [cap];
for (int i = 1; i <= size; i++)
tempHeap[i] = heap[i];
delete [] heap;
heap = tempHeap;
}
size = size + 1;
heap[size] = k; // insertar elemento al final del montículo
int i = size; // establecer i en el tamaño
while (i != 1 && heap[parent(i)] > heap[i]) { // moverse hacia los padres hasta que se restaure la propiedad del montículo hasta la raíz
swapKeys(&heap[parent(i)], &heap[i]); // intercambiar elementos
i = parent(i); // establecer i en el padre de i
}
}

Esto soluciona el SegFault que estaba ocurriendo y muestra correctamente el montículo.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema con el programa que se ejecuta en el servidor Linux de la escuela es un error de segmentación. La herramienta de depuración GDB muestra el mensaje de error “Program received signal SIGSEGV, Segmentation fault. 0x00007ffff7ae8d68 in std::string::assign(std::string const&).”

    Después de realizar algunas pruebas de depuración, se encontró que el problema estaba en la función de inserción. La función de inserción actualizada se presenta arriba, la cual soluciona el error de segmentación y muestra correctamente el montón.

Comments are closed.