• Viernes 8 de Noviembre de 2024, 18:59

Autor Tema:  Duda de principiante con punteros C++  (Leído 1637 veces)

xuturk

  • Miembro activo
  • **
  • Mensajes: 50
    • Ver Perfil
Duda de principiante con punteros C++
« en: Jueves 12 de Mayo de 2011, 18:18 »
0
Hola a todos, estoy iniciandome en el bajo nivel, y la primera en toda la frente.. xD, resulta que haciendo ejercicios, he visto uno que consiste en recorrer mediante punteros un vector de el ultimo lugar y desde el primero hasta que los dos punteros se junten y si se necesitan ordenar, se intercambien los valores, llevo buen rato dandole vueltas, y la mejor solucion a la que he llegado con apuntes que he mirado mil y una veces es la siguiente funcion:

Código: C++
  1.  
  2. void Ordenar(int *vector,int nElementos,bool ascendente)
  3. {
  4.       int *vectorMax=(vector+nElementos-1);
  5.      
  6.          while(vector!=vectorMax)
  7.          {
  8.          if(vector>vectorMax)
  9.          {
  10.          int aux=*vector;
  11.          *vector=*vectorMax;
  12.          *vectorMax=aux;                
  13.          }
  14.          vector++;
  15.          vectorMax--;          
  16.       }                    
  17. }
  18.  
  19.  


Mi problema es que o el programa se me cierra, o me da una excepcion y no comprendo por que si no deberia salirse del vector ya que al juntarse los dos punteros tendrian la misma direccion de memoria.

Me esta dando muchos dolores de cabeza asi que les agradeceria que me ayudaran jejej.

Muchas gracias y un saludo!

posman

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Duda de principiante con punteros C++
« Respuesta #1 en: Jueves 12 de Mayo de 2011, 23:31 »
0
El problema es que puede darse el caso de que vector sobrepase a vectorMax. Y como la condicion que tienes en el while indica que se ejecute mientras sean diferentes, se va a ejecutar indefinidamene hasta que se causa el error.

Por ejemplo, vector = 1000 (un direccion de memoria cualquiera), nElementos = 2, entonces vectorMax valdria 1001.

Entonces en la primer pasada, al ejecutar esto:
vector++;
vectorMax--;

vector = 1001 y vectorMax = 1000

Ambos valores son diferentes y el while se ejecutaria indefinidamente

xuturk

  • Miembro activo
  • **
  • Mensajes: 50
    • Ver Perfil
Re: Duda de principiante con punteros C++
« Respuesta #2 en: Viernes 13 de Mayo de 2011, 12:06 »
0
Ala, es verdad jajaj madre mia que fallo mas tonto, se ve que no lo pense de esa manera jajaj, ya esta solucionado claro, no me daba cuenta ahora simplemente he puesto si vector es mayor a nElementos/2 o vectorMax lo mismo y funciona perfectamente jejej


Muchas gracias :D

Un saludo! ^__^