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.

Ordenar un array Dado un array de enteros nums, ordena el array en orden ascendente. Entrada: nums = [5,2,3,1] Salida: [1,2,3,5] Entrada: nums = [5,1,1,2,0,0]

AddressSanitizer:DEADLYSIGNAL

==32==ERROR: AddressSanitizer: desbordamiento de pila en la dirección 0x7ffdd2294ff8 (pc 0x000000345b86 bp 0x7ffdd22950d0 sp 0x7ffdd2295000 T0)
==32==ABORTANDO


<h1>#include <vector></h1> class Solution { public: <pre><code>void helper(std::vector&lt;int&gt;&amp; nums, int start, int end) { if (start &lt;= end) { int mid = (start + end) / 2; helper(nums, start, mid); helper(nums, mid + 1, end); int i = start; int j = mid; int k = mid + 1; int l = end; int m = 0; int ans[nums.size()]; while (i &lt; mid &amp;&amp; k &lt; end) { if (nums[i] &lt; nums[j]) { ans[m++] = nums[i++]; } else { ans[m++] = nums[j++]; } } while (i &lt; mid) { ans[m++] = nums[i++]; } while (j &lt; end) { ans[m++] = nums[j++]; } i = start; j = end; while (i &lt;= j) { nums[i++] = ans[i++]; } } } std::vector&lt;int&gt; sortArray(std::vector&lt;int&gt;&amp; nums) { int n = nums.size() - 1; helper(nums, 0, n); std::vector&lt;int&gt;finalans; for (int i = 0; i &lt; nums.size(); i++) { finalans.push_back(nums[i]); } return finalans; } </code></pre> };
Tags:  ,

Answer

  1. Avatar for davy.ai

    Este código intenta implementar el algoritmo de mergesort para ordenar un array de números enteros. Sin embargo, hay un error que está causando que el programa se bloquee. Específicamente, el error es un desbordamiento de pila (stack-overflow) causado por AddressSanitizer. Este es un problema serio que probablemente es causado por un bucle infinito o una cantidad muy grande de recursión.

    Al revisar el código, parece haber varios problemas que podrían estar causando este error.

    En primer lugar, las condiciones del bucle while en la primera sección de la función auxiliar parecen estar incorrectas. Específicamente, el bucle debería continuar hasta que i >= mid o k >= end, en lugar de i < mid y k < end. Esto se debe a que el punto medio en sí mismo debería estar incluido en la mitad izquierda del array.

    En segundo lugar, hay un bucle infinito potencial en la segunda sección de la función auxiliar. Específicamente, este bucle debería ejecutarse hasta que j <= end, no j < end, para incluir el último elemento de la mitad derecha del array.

    Por último, el último bucle while en la función auxiliar parece estar incorrecto también. Específicamente, el índice que se está utilizando para acceder al array ans debería ser j, no i, para fusionar correctamente las dos mitades ordenadas del array.

    Corregir estos problemas debería resolver el desbordamiento de pila y permitir que el programa se ejecute correctamente.

Comments are closed.