|
41
|
Programación / Programación C/C++ / Re: Error en malloc()
|
en: 9 Noviembre 2012, 03:54 am
|
Eso es porque he copiado mal.... El codigo es: char* funcion(int sizeMalloc){ char* buffer =(char*)malloc(sizeMalloc ); return buffer; }
Y mi error no es de compilacion es un fallo de segmentacion....Estoy debugeando el programa porque los malloc() en general me dan este error y no se porque.... ¿Alguien sabe sobre bugs del malloc() o de alguna funcion que me permita reservar memoria y que no de errores? Gracias, un saludo.
|
|
|
42
|
Programación / Programación C/C++ / Error en malloc()
|
en: 9 Noviembre 2012, 03:39 am
|
¡Buenas a todos! Tengo un problema con la funcion malloc() porque me da fallo de segmentacion....el codigo es como este... char* funcion(int sizeMalloc){ char* buffer =(char*)malloc(sizeMalloc ) return buffer; }
El error que me da es este: malloc.c:2451: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed Y la pila es esta: (gdb) bt #0 0x00132416 in __kernel_vsyscall () #1 0x001611df in __GI_raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64 #2 0x00164825 in __GI_abort () at abort.c:91 #3 0x001a8469 in __malloc_assert (assertion=<optimized out>, file=<optimized out>, line=2451, function=0x29518a "sYSMALLOc") at malloc.c:300 #4 0x001ab293 in sYSMALLOc (av=0x2d9440, nb=40) at malloc.c:2448 #5 _int_malloc (av=0x2d9440, bytes=35) at malloc.c:3892 #6 0x001acddc in __GI___libc_malloc (bytes=35) at malloc.c:2924
¿Cual es el problema? ¿Como lo soluciono? Gracias, un saludo.
|
|
|
43
|
Programación / Programación C/C++ / Re: Ejercicio en C de Vectores 1.2[Borland 5.02]
|
en: 6 Noviembre 2012, 10:55 am
|
¡Buenas SonaArtica! No he ejecutado tu programa pero creo que tiene un par de fallos... 1) el bucle se ejecuta 59 veces cuando deberia ser 60. El array va desde 0 hasta 59 y tu bucle va desde 1 hasta 59. Asi que el bucle escribelo asi: for(i=0;i<60;i++){ //codigo }
2) y los if del bucle no son del todo correcto si te fijas, pones if (i==1 || tiempo[i-1]<mejortiempo){ //codigo } if(i==1 || tiempo[i-1]>autoganador){ //codigo }
Para el caso i==1 entras en ambos if y lo que hagas en el segundo puede anular lo que hayas hecho en el primero. Y ademas no calculas bien el perdedor.....(usa else para que tu programa sea mas eficiente) Yo lo haria asi...: #include <stdio.h> #include <conio.h> /* Se deben cargar en un vector los tiempos de clasificacion de 60 autos. Los autos se identifican con numeros correlativos del 1 al 60.Se pide determinar: a)Numero de Auto que clasifico primero. b)Peor tiempo de clasificacion. */ main(){ int tiempo[60]; int autoganador=0; int i=0; float peortiempo,mejortiempo; //el primero es el mejor y el peor al mismo tiempo ya que es el unico printf("Ingrese Tiempo de auto %d \n",i ); peortiempo=tiempo[0]; //pedimos que ingrese datos y comparamos for(i=1;i<60;i++){ printf("Ingrese Tiempo de auto %d \n",i ); if (tiempo[i]<mejortiempo){ autoganador=i; mejortiempo=tiempo[i]; }//Cierre del If que saca al auto ganador else(tiempo[i]>peortiempo){//ESTA LINEA HA CAMBIADO! peortiempo=tiempo[i]; }//Cierre del If que saca el peor tiempo } printf("El auto ganador es %d con el tiempo de %f \n",autoganador +1,mejortiempo ); printf("El auto con peor tiempo fue de %f \n",peortiempo ); return 0; }
En caso de empate con mejor tiempo tanto tu programa como el mio imprimiran el primer coche.... NOTA: el codigo lo he hecho a ojo y no lo he compilado pero creo que es correcto el algoritmo. Un saludo.
|
|
|
44
|
Programación / Programación C/C++ / Re: Ayuda Con progrmacion en SCILAB (muy parecido a C)
|
en: 4 Noviembre 2012, 23:59 pm
|
¡Buenas kiximbo! La pregunta importante es....¿Por que hacerlo en scilab y no en C? Te lo digo porque es muy posible que encuentres muchos mas tutoriales de C que de scilab...de hecho, por el foro encontraras muchas funciones en C que necesitas para tu juego como por ejemplo la creacion del tablero que es una matriz de tipo ficha.... ficha_t tablero[10][10];
Y la funcion random() ya esta implementada en C...asi que te recomiendo que lo hagas en C mejor que en scilab ya que podras tener mucha mas ayuda. Un saludo.
|
|
|
45
|
Programación / Programación C/C++ / time() localtime()
|
en: 3 Noviembre 2012, 06:03 am
|
Buenas a todos! tengo un problema con esta funcion...me da fallo de segmentacion en la funcion localtime() char * getDateTime(){ char * fecha =(char*)malloc(200); char * dia=""; char * mes=""; switch(tm->tm_wday){ case 0: dia="Sun"; break; case 1: dia="Mon"; break; case 2: dia="Tue"; break; case 3: dia="Wed"; break; case 4: dia="Thu"; break; case 5: dia="Fri"; break; case 6: dia="Sat"; break; default: dia="???"; break; } switch(tm->tm_mon){ case 0: mes="Jan"; break; case 1: mes="Feb"; break; case 2: mes="Mar"; break; case 3: mes="Apr"; break; case 4: mes="May"; break; case 5: mes="Jun"; break; case 6: mes="Jul"; break; case 7: mes="Aug"; break; case 8: mes="Sep"; break; case 9: mes="Oct"; break; case 10: mes="Nov"; break; case 11: mes="Dec"; break; default: mes="???"; break; } sprintf(fecha ,"Date: %s , %d %s %d %d:%d:%d GMT",dia , tm ->tm_mday , mes , tm ->tm_year +1900, tm ->tm_hour , tm ->tm_min , tm ->tm_sec ); return fecha; }
¿Por que me da fallo de segmentacion? Gracias, un saludo
|
|
|
46
|
Programación / Programación C/C++ / Re: Send() return -1 en C
|
en: 2 Noviembre 2012, 04:02 am
|
Pues...creo que si....el socket lo asocio con un bind() a la interfaz de red wlan0 y el paquete que le mando tiene un struct ethdr + struct iphdr + struct tcphdr , deberia mandar algon antes del struct ethdr??
|
|
|
47
|
Programación / Programación C/C++ / Re: Send() return -1 en C
|
en: 2 Noviembre 2012, 01:40 am
|
Una pregunta....¿Es posible que el error sea por que creo 2 sockets? es decir, ¿una aplicacion de C en linux solo puede abrir un solo sockect?
Es que ya no se me ocurren mas ideas....
|
|
|
48
|
Programación / Programación C/C++ / Send() return -1 en C
|
en: 1 Noviembre 2012, 02:56 am
|
¡Buenas a todos! Tengo un problema con la funcion send(). Siempre me retorna -1 y no se porque.... El socket lo creo asi: int CreateRawSocket(int protocol_to_sniff){ //Crea un raw socket int rawsock; if((rawsock = socket(PF_PACKET, SOCK_RAW, htons(protocol_to_sniff)))== -1) { perror("Error creating raw socket: "); } return rawsock; }
El bind lo hago asi: int BindRawSocketToInterface(char *device, int rawsock, int protocol){ //Hace un bind del socket con la interfaz de red struct sockaddr_ll sll; struct ifreq ifr; bzero(&sll, sizeof(sll)); bzero(&ifr, sizeof(ifr)); strncpy((char *)ifr. ifr_name, device , IFNAMSIZ ); if((ioctl(rawsock, SIOCGIFINDEX, &ifr)) == -1) { printf("Error getting Interface index !\n"); } sll.sll_family = AF_PACKET; sll.sll_ifindex = ifr.ifr_ifindex; sll.sll_protocol = htons(protocol); if((bind(rawsock, (struct sockaddr *)&sll, sizeof(sll)))== -1) { perror("Error binding raw socket to interface\n"); } return 1; }
Luego creo un char * con los datos a enviar y lo envio con esta funcion: int SendRawPacket(int rawsock, char *pkt, int pkt_len){ //Envia un raw packet int sent=0; if((sent = send(rawsock, pkt, pkt_len,TH_FLAGS)) != pkt_len) { /* Error */ printf("Could only send %d bytes of packet of length %d\n", sent , pkt_len ); return 0; } return 1; }
Y la funcion send() siempre me retorna -1 y no se porque...El socket esta bien creado...lo he mirado con gdb y tengo la variable rawsock=8. Y la variable pkt_len=strlen(pkt)=54 Si el socket esta bien creado y el bind es correcto...¿Por que no me envia los datos? Gracias, un saludo.
|
|
|
49
|
Seguridad Informática / Hacking / Re: wireshark "bytes in flight"
|
en: 31 Octubre 2012, 02:00 am
|
Nada, al final esto fue un fallo tonto que tuve....
Wireshark no me detectaba mis paquetes HTTP porque la cabecera HTTP no era correcta. El campo "Content-Length" lo habia escrito sin una "t"....."Content Lengh"....en cuanto lo corregi, wireshark me lo detecto como un paquete HTTP.
Gracias, un saludo.
|
|
|
50
|
Programación / Programación C/C++ / Re: Romper ejecucion de un bucle
|
en: 31 Octubre 2012, 01:55 am
|
¡Gracias por sus respuestas! Al final el codigo me ha quedado asi... #include <stdio.h> #include <pthread.h> #include <string.h> #include <unistd.h> void * pararBucle(); char * c="a"; int main(){ pthread_t hilo; pthread_create(&hilo,NULL, pararBucle,NULL); printf("Iniciando bucle infinito\n"); } return 0; } void * pararBucle(){ char aux='a'; while(aux!='q') read(STDIN_FILENO,&aux,1); c="q"; return (void *)"q"; }
Lo unico que tiene una variable global que no se como quitar. He probado a pasarle la variable c a la funcion pthread_create() asi: pthread_create(&hilo,NULL, pararBucle,(void *) c);
Y luego le paso un void * a la funcion pararBucle(void * c){} Con estos cambios el programa compila, pero la funcion pararBucle cuando acaba no cambia el valor de c y el bucle infinito no para. Asi que....¿que debo hacer para que la variable c quede compartida por ambos hilos? Gracias, un saludo.
|
|
|
|
|
|
|