Buenas a todos , estoy intentando crear operaciones para un árbol binario y no se que sucede, el compilador me da estos resultados
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
*** 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
#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){
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;
}
}
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
printf("\nPos:%d ele:%d",numElem
,*array
[numElem
]);
espero que se solucione solo con agregarle la libreria...
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?
*** 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
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?