struct node
{
Item item; node *l, *r;
node(Item x) {item = x; l = 0; r = 0;}
};
typedef node* link;
link max(Item a[], int l, int r)
{
int m = (l+r)/2;
link x = new node(a[m]);
if (l==r) return x; // return a local pointer
x->l = max(a, l, m);
x-r = max(a, m+1, r);
Item u = x->l->item, v = x->r->item;
if (u>v) x->item = u;
else x->item=v;
return x; // return a local pointer
}
Este es un fragmento de código de "Algoritmo en C++" de Robert Sedgewick, página 252, Programa 5.19. Y en la función max()
, la variable devuelta es un puntero que se crea dentro de la función.devolver un puntero local
En mi opinión, devolver un puntero local no está permitido en c/C++. Entonces mi pregunta es: "¿está bien escribir una función como esta?" No puedo creer que un libro tan clásico cometa un error como este. ¿O malinterpreté el principio? Por favor ayuda. Gracias.
'enlace x = nodo nuevo (a [m]);'! = Puntero local – Mysticial
@Mysticial: Pedadíticamente hablando, * es * un puntero local, pero no apunta a un objeto local :-) –
En 'c' devolver un puntero a una variable local con el resultado de una advertencia, y probablemente debe evitarse a menos que sepa lo que está haciendo, pero va a funcionar. No estoy seguro de que 'C++' lo cambie a un error. – twain249