<div dir="ltr">Hola César,<div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jun 21, 2013 at 12:12 AM, César Arias <span dir="ltr"><<a href="mailto:sinatra435@hotmail.com" target="_blank">sinatra435@hotmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">


<div><div dir="ltr">

<p class="" style="margin-bottom:0.0001pt">Hola, hola,
tengo un pequeño problema con este programa:</p>

<p class="" style="margin-bottom:0.0001pt"></p></div></div></blockquote><div><br></div><div style>[CORTE]</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div><div dir="ltr"><p class="" style="margin-bottom:0.0001pt">Como se darán
cuenta al ejecutarlo el programa llega hasta el final, pero al terminar salen
un mensaje de diciendo que el programa dejo de funciona.<br></p>

<p class="" style="margin-bottom:0.0001pt">Gracias por
sus respuestas de antemano.</p>

                                          </div></div>
<br><br></blockquote><div><br></div><div style>El problema está en la instanciación de 'men'. Escribes:<br><br>MAT mat(3), men(3-2);<br></div><div style><br></div><div style>Esto implica que creas una matriz de 1x1 para 'men'. Luego usas tal matriz aquí:</div>
<div style><br></div><div style>mat.menor( men, 0, 0 );<br></div><div style><br></div><div style>que funciona en base a la matriz 3x3 de 'mat' para crear una submatriz de 2x2. Sin embargo, 'men' es una matriz de 1x1. Estás accediendo a memoria que no pertenece a 'men.m' e intentas guardar enteros más allá de los límites del array dinámico que creas para 'men'.</div>
<div style><br></div><div style>La solución es crear una matriz cuadrada de tamaño correcto; esto es,</div><div style><br></div><div style>MAT men(2);</div><div style><br></div><div><br></div><div style>Además, por alguna razón usas 'malloc()' y 'free()' cuando es muchísimo más sencillo y seguro usar los operadores 'new[]' y 'delete[]' que pertenecen al lenguaje de C++. De hecho, provocas un error con el uso de 'malloc()' en el constructor. Escribes:</div>
<div style><br></div><div style><div>m=(int **)malloc(sizeof(unsigned)*ord);</div><div><br></div><div style>Usas 'unsigned' cuando deberías calcular el tamaño de un puntero; esto es,</div><div><br></div><div>m = (int **) malloc( sizeof(int *) * ord );</div>
</div><div style><br></div><div style>Por esto mismo aconsejo usar 'new[]', ya que toma en cuenta el tamaño correcto del tipo de dato. Simplemente escribe:<br><br>m = new int*[ord];</div><div style><br></div><div style>
<br></div><div style>Debes implementar un destructor, especialmente para el diseño de 'MAT', ya que adjudicas memoria dinámicamente; y por tanto, debes desadjudicarla, a más tardar en su destructor. Veo que has intentando hacer esto, pero el problema es que intentas liberar la memoria de 'ord'. Esto es un error, porque no tienes control sobre su gestión de memoria; su liberación de memoria se hace automáticamente.</div>
<div style><br></div><div style><br></div><div style>Por último, no aconsejo acostumbrarse a usar 'continue'. Entiendo que en este caso, viene como anillo al dedo, pero en general uno debería diseñar sin pensar en 'continue', 'break', ni por supuesto 'goto'.</div>
<div style><br></div><div style><br></div><div style>Espero que todo esto aclare las dudas.</div><div><br></div></div>Steven</div><div class="gmail_extra"><br></div></div>