Hola todas/os:
Tengo un inconveniente digno de algoritmos dos y que
probablemente me cueste la cursada de taller 1. A
quien prosiga en la lectura le recomiendo leer muy
superficialmente hasta llegar a 3) y alli remontar.
Hay unos comentarios /* version 2*/ que señalan los
cambios para la segunda version.
1) Este código aparentemente funciona ok, siendo
llamado desde main()
Reader * reader = new Reader();
readers->put(reader);
/*-----------------------------------------------------
* put() llama a:
-----------------------------------------------------*/
int put(Type * data) {
DoubleNodeList<Type> * node;
if ( isFull()) return 1;
node = new DoubleNodeList<Type>(data);
if (!node) return 1;
if (first == 0 && last == 0) {
first = node;
last = node;
} else {
first->prev = node;
node->next = first;
first = node;
}
return 0;
}
/*-----------------------------------------------------
* constructor de nodo
------------------------------------------------------*/
DoubleNodeList(Type * data){
this->data = data;
/*-----------------------------------------------------
* 2) Este otro código no, siendo llamado desde un
metodo
------------------------------------------------------*/
/*version 2*/ char ** ptrnewline;
char * newline = (char*)malloc(strlen(line)+2);
strncpy(newline, line, strlen(line)+1);
/*version 2*/ ptrnewline = &newline;
context->fifo->put(newline); /* version 2 */
put(ptrnewline)
/*-----------------------------------------------------
* este put() llama a:
------------------------------------------------------*/
bool Buffer::put(char * data){ /*version 2*/ (char **
data){
list->put(&data); /* version 2 */ (data);
return 0;
}
/*-----------------------------------------------------
* que llama al put() definido anteriormente.
------------------------------------------------------*/
3) Lo que ocurre es que aunque queda una lista bien
formada, data se hace picadillo y todos los nodos
apuntan al mismo data..
Utilizando la version 2, data no se hace picadillo,
pero todos los nodos apuntan al mismo data
Lo interesante ademas es que aparece un data por cada
thread de ejecucion.
Creo que en sintesis mi problema pasa por que al
almacenar data en el construtor de nodo, lo que estoy
almacenando es la direccion del puntero y no el
puntero en si. En main() anda y desde una funcion
pincha por que se va de contexto. Con ddd veo llegar
data hasta ahi justito y despues puff.
Desde ya, gracias por cualquier esclarecimiento o
pista.
Charli
____________________________________________________________________________________
Be a better friend, newshound, and
know-it-all with Yahoo! Mobile. Try it now.
http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion