Problema con arbol en ubuntu

Páginas: (1/1)

Gallu:

Buenas a todos , estoy intentando crear operaciones para un árbol binario y no se que sucede,  el compilador me da estos resultados
Código
--
diego@diego-desktop:~/Documentos/fuente$ gcc arbol.c -o arbol
--
arbol.c: En la función ‘main’:
--
arbol.c:24: aviso: declaración implícita incompatible de la función interna ‘malloc’
--
arbol.c: En la función ‘insertar’:
--
arbol.c:43: aviso: declaración implícita incompatible de la función interna ‘malloc’
--
arbol.c: En la función ‘arbol_to_array’:
--
arbol.c:76: aviso: declaración implícita incompatible de la función interna ‘realloc’
--
arbol.c:81: aviso: declaración implícita incompatible de la función interna ‘realloc’
--
diego@diego-desktop:~/Documentos/fuente$
--
 
--
Pero cuando ejecuto me aparece los siguiente
Código
--
*** glibc detected *** ./arbol: realloc(): invalid pointer: 0xbfe00bd8 ***
--
======= Backtrace: =========
--
/lib/tls/i686/cmov/libc.so.6[0xb7640604]
--
/lib/tls/i686/cmov/libc.so.6(realloc+0x242)[0xb7645022]
--
/lib/tls/i686/cmov/libc.so.6(realloc+0x42)[0xb7644e22]
--
./arbol[0x804872f]
--
./arbol[0x8048519]
--
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe5)[0xb75e7775]
--
./arbol[0x80483a1]
--
======= Memory map: ========
--
08048000-08049000 r-xp 00000000 08:05 10223911   /home/diego/Documentos/fuente/arbol
--
08049000-0804a000 r--p 00000000 08:05 10223911   /home/diego/Documentos/fuente/arbol
--
0804a000-0804b000 rw-p 00001000 08:05 10223911   /home/diego/Documentos/fuente/arbol
--
08ffa000-0901b000 rw-p 08ffa000 00:00 0          [heap]
--
b75d0000-b75d1000 rw-p b75d0000 00:00 0
--
b75d1000-b772d000 r-xp 00000000 08:05 376906     /lib/tls/i686/cmov/libc-2.9.so
--
b772d000-b772e000 ---p 0015c000 08:05 376906     /lib/tls/i686/cmov/libc-2.9.so
--
b772e000-b7730000 r--p 0015c000 08:05 376906     /lib/tls/i686/cmov/libc-2.9.so
--
b7730000-b7731000 rw-p 0015e000 08:05 376906     /lib/tls/i686/cmov/libc-2.9.so
--
b7731000-b7734000 rw-p b7731000 00:00 0
--
b7734000-b7741000 r-xp 00000000 08:05 327701     /lib/libgcc_s.so.1
--
b7741000-b7742000 r--p 0000c000 08:05 327701     /lib/libgcc_s.so.1
--
b7742000-b7743000 rw-p 0000d000 08:05 327701     /lib/libgcc_s.so.1
--
b7743000-b7746000 rw-p b7743000 00:00 0
--
b7746000-b7747000 r-xp b7746000 00:00 0          [vdso]
--
b7747000-b7763000 r-xp 00000000 08:05 328221     /lib/ld-2.9.so
--
b7763000-b7764000 r--p 0001b000 08:05 328221     /lib/ld-2.9.so
--
b7764000-b7765000 rw-p 0001c000 08:05 328221     /lib/ld-2.9.so
--
bfded000-bfe02000 rw-p bffeb000 00:00 0          [stack]
--
Cancelado
--
 
--
Agradeceria cualquier sugerencia , el código es el siguiente
Código
--
#include <stdio.h>
--
 
--
typedef struct {
--
   int  info;
--
   void *izq , *der;
--
}Nodo;
--
 
--
//definimos el tipo puntero a nodo
--
typedef Nodo * PtrNodo;
--
 
--
 
--
void insertar(PtrNodo *ptrNodo, int info);
--
int esVacio(PtrNodo nodo);
--
int buscar(PtrNodo nodo, int elem);
--
int nodos(PtrNodo nodo);
--
int arbol_to_array(PtrNodo nodo, int **array, int numEle);
--
 
--
int main(){
--
   PtrNodo raiz = NULL;
--
   int array[] ={8,1,4,2,6,7};
--
   int info = 4;
--
   int  *elem;
--
   int i = 0;
--
   elem = (int*)malloc(sizeof(int));
--
   insertar(&raiz , array[0]);
--
   insertar(&raiz , array[1]);
--
   insertar(&raiz , array[2]);
--
   insertar(&raiz , array[3]);
--
   insertar(&raiz , array[4]);
--
   insertar(&raiz , array[5]);
--
   if(arbol_to_array(raiz, &elem , 0)){
--
       while(i < 5){
--
           printf("\nValor %d",elem[1]);
--
           i++;
--
       }
--
   }
--
   return 0;
--
}
--
 
--
 
--
void insertar(PtrNodo *ptrNodo, int info){
--
   if(esVacio(*ptrNodo)){
--
       *ptrNodo = (PtrNodo) malloc(sizeof(Nodo));
--
       (*ptrNodo)->info = info;
--
       (*ptrNodo)->izq = (*ptrNodo)->der = NULL;
--
   }
--
   else if ((*ptrNodo)->info < info) insertar((void*)(&(*ptrNodo)->der), info);
--
   else if ((*ptrNodo)->info > info) insertar((void*)(&(*ptrNodo)->izq), info);
--
}
--
 
--
 
--
int esVacio(PtrNodo nodo){
--
   if(nodo == NULL)return 1;
--
   return 0;
--
}
--
 
--
int buscar(PtrNodo nodo, int elem){    
--
 if (nodo == NULL) return 0;
--
 else if (nodo->info < elem) return buscar(nodo->der, elem);
--
 else if (nodo->info > elem) return buscar(nodo->izq, elem);
--
 else return 1;
--
}
--
 
--
int nodos(PtrNodo nodo){
--
   if(!nodo)return 0;
--
   else return(1 + nodos(nodo->izq) + nodos(nodo->der));
--
}
--
int arbol_to_array(PtrNodo nodo, int **array, int numElem){    
--
   if(!nodo){
--
       return 0;
--
   }else{        
--
       *array[numElem] = nodo->info;
--
       printf("\nPos:%d  ele:%d",numElem ,*array[numElem]);
--
       if(nodo->izq){
--
           numElem++;
--
           realloc(array , (numElem + 1) * sizeof(int));
--
           arbol_to_array(nodo->izq , array , numElem);
--
       }
--
       if(nodo->der){
--
           numElem++;
--
           realloc(array , (numElem + 1) * sizeof(int));
--
           arbol_to_array(nodo->der , array , numElem);
--
       }
--
       return 1;
--
   }
--
}
--
 
--
 
--
 
--


SeC:

Código
--
#include <stdlib.h>
--


Gallu:

Lo probaré en casa en ubuntu , pero aqui en el curro , con windows , se ejecuta una vez el print de arbol_to_array y peta
Código
--
 printf("\nPos:%d  ele:%d",numElem ,*array[numElem]);
--
espero que se solucione solo con agregarle la libreria...


Gallu:

Nada de nada sec la salida de la ejecución del programa peta , alguien sabe que es lo que debo aprender para interpretar el resultado que me muestra la consola?
Código
--
*** glibc detected *** ./arbol: realloc(): invalid pointer: 0xbf85d614 ***
--
======= Backtrace: =========
--
/lib/tls/i686/cmov/libc.so.6[0x699ff1]
--
/lib/tls/i686/cmov/libc.so.6(realloc+0x2b8)[0x69fa38]
--
/lib/tls/i686/cmov/libc.so.6(realloc+0x2d0)[0x69fa50]
--
./arbol[0x8048735]
--
./arbol[0x8048549]
--
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0x645b56]
--
./arbol[0x80483c1]
--
======= Memory map: ========
--
00492000-00493000 r-xp 00000000 00:00 0          [vdso]
--
0062f000-0076d000 r-xp 00000000 08:05 377255     /lib/tls/i686/cmov/libc-2.10.1.so
--
0076d000-0076e000 ---p 0013e000 08:05 377255     /lib/tls/i686/cmov/libc-2.10.1.so
--
0076e000-00770000 r--p 0013e000 08:05 377255     /lib/tls/i686/cmov/libc-2.10.1.so
--
00770000-00771000 rw-p 00140000 08:05 377255     /lib/tls/i686/cmov/libc-2.10.1.so
--
00771000-00774000 rw-p 00000000 00:00 0
--
00b25000-00b41000 r-xp 00000000 08:05 327685     /lib/libgcc_s.so.1
--
00b41000-00b42000 r--p 0001b000 08:05 327685     /lib/libgcc_s.so.1
--
00b42000-00b43000 rw-p 0001c000 08:05 327685     /lib/libgcc_s.so.1
--
00c72000-00c8d000 r-xp 00000000 08:05 327732     /lib/ld-2.10.1.so
--
00c8d000-00c8e000 r--p 0001a000 08:05 327732     /lib/ld-2.10.1.so
--
00c8e000-00c8f000 rw-p 0001b000 08:05 327732     /lib/ld-2.10.1.so
--
08048000-08049000 r-xp 00000000 08:05 10223911   /home/diego/Documentos/fuente/arbol
--
08049000-0804a000 r--p 00000000 08:05 10223911   /home/diego/Documentos/fuente/arbol
--
0804a000-0804b000 rw-p 00001000 08:05 10223911   /home/diego/Documentos/fuente/arbol
--
080ff000-08120000 rw-p 00000000 00:00 0          [heap]
--
b78db000-b78dc000 rw-p 00000000 00:00 0
--
b78ec000-b78ef000 rw-p 00000000 00:00 0
--
bf84a000-bf85f000 rw-p 00000000 00:00 0          [stack]
--
Pos:0  ele:8Cancelado
--
 
--
 
--


Gallu:

Estoy viendo que el problemas es el realloc  que no me reserva más memoria , el puntero *array en arbol_to_array  siempre mide 4 , alguien sabe por que sucede?

Páginas: (1/1)