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;
}
}