Título: Errores y magia en vector<> C++ Publicado por: Kaxperday en 6 Julio 2015, 15:29 pm Bueno tras perder todo lo que acabo de escribir iré al grano.
Tengo una clase que contiene 2 vectores, uno contiene la lista de ips y otro la lista de macs de la red, a ips[2] le correspondería la mac macs[2]. Fácil. Ambos vectores son de tipo u_char*. Antes que nada os dejo el codigo: La clase es lista_usuarios: Código
La llamada a la función es así: Código: lista.almacena_usuario(ip,mac); Yo le paso la ip y la mac del host, ambas son u_char*. Ahora comienza la MAGIA del programa, cuando esto: printf("%x", ips[0][k]); Muestra cada vez una cosa distina, es decir el vector de las ips su primer elemento (ips[0]) que contiene 4 valores u_char que corresponden a la IP, VEMOS que en cada llamada toma una IP distinta que casualmente es justo la que ha recibido, luego el vector siempre tiene 1 elemento, que es cuando cont=0 la primera vez (al no haber ips/mac entra porque no hay otra igual a la suya), si hay igual no se añade y saldría. Salida: (muestra el contenido del primer elemento del vector de ips como vemos su valor se sobreescribe ¿porque? no lo sé) Código: ac1aab0- Al final muestra las IPs de la lista y su MAC asociada, en este caso 1 solo, ¿porque? porque la lista solo tiene un elemento, ¿porque? porque se sobreesribe... DesesperanT. OJO que si pruebo a hacer simplemente esto: Código: lista.ips.insert(lista.ips.end(), ip); La lista me sale con 40 elementos todos iguales, a pesar de que al insertar inserto distintos elementos, ¿esto que broma es? Título: Re: Errores y magia en vector<> C++ Publicado por: ivancea96 en 6 Julio 2015, 16:33 pm Código
Eso, nunca, salvo que realmente lo quieras así, claro. Estás metiendo una dirección. Esa dirección, al acabar el programa, puede desaparecer (tú sabrás qué haces con ella). Lo que has de hacer es malloc() y copiar lso bytes. Además, te recomendaría usar push_back, para evitar tener que desplazar todo el array internamente. Y si es posible, sería mejor que hicieras una estructura, que sea lo que guardes en el vector. En esa estructura, en constructor y destructor es donde deberías copiar y liberar memoria. Título: Re: Errores y magia en vector<> C++ Publicado por: Kaxperday en 6 Julio 2015, 16:49 pm Ooohhhhhg, está claro que esto es una chapuza:
Código
Ahora bien, crearé una estructura y trataré de almacenar los datos en ella creo que realmente es lo mejor (haber si me acuerdo como iba eso del next etc XD), y luego ya veré que tal me va. Y lo pondré por aquí. ¿que tal una estructura así? Código: struct hosts Es que despues de lo que he programado y que me falle al final... otra vez a cambiarlo :D :D :D :D :D :D :D Edito: ¿No sabrás como se hacia para añadir un nuevo elemento a la lista con el malloc? Título: Re: Errores y magia en vector<> C++ Publicado por: Kaxperday en 6 Julio 2015, 17:01 pm Código: struct host Eso tengo hasta ahora, no se si tengo bien lo de añadir nuevo host usando el malloc. .. me sale que ha dejado de funcionar y no puedo depurarlo porque me faltan los PDBs :-X :-X :-X Título: Re: Errores y magia en vector<> C++ Publicado por: ivancea96 en 6 Julio 2015, 17:22 pm Código: struct host *usuarios = NULL; Como dato, en C++ no necesitas poner "struct " al principio. Puedes hacer un vector<host> o un list<host>. Ya que en la estructura hay punteros, deberías hacer constructor, constructor de copia y destructor. Si no los haces, entonces deberías hacer una list<>, ya que el vector andará copiando los elementos. Ya que pretendes hacer una lista, pues list<host> te va a ahorrar todo lo relacionado con la lista. Y otra cosa importante: en C++, y especialmente si usas clases y estructuras, evita usar malloc(), y usa new. Malloc solo consigue memoria. New además, llama a los constructores. Aquí es donde te pregunto: ¿Quieres seguir con C, o con C++? De hecho, juraría que vi en otro tema que usabas cout. Pero aquí solo veo printf. Si bien se pueden mezclar sin ningún problema, pues bueno. Título: Re: Errores y magia en vector<> C++ Publicado por: Kaxperday en 6 Julio 2015, 17:33 pm Ohhhhhhhgggg, eso quiere decir que otra vez a cambiarlo todo, usaré vector<host> y a ver........ si...... lo consigo, muchas gracias.
La verdad aprendí C, no C++, sin embargo son casi iguales así que no tengo apenas problemas, otra cosa que me acuerde de C XDD Saludos. Edito: ¿Como insertaría la ip y la mac en la lista despues? Edito SOLUCIONADO!!!! Ya me muestra todas las jodidas ips y macs sin problemas de la reeed!!!. Código
Gracias socio, siempre en deuda. Título: Re: Errores y magia en vector<> C++ Publicado por: ivancea96 en 6 Julio 2015, 17:58 pm Como dato, puedes cambiar
Código: usuarios.insert(usuarios.end(), usuario); Código: usuarios.push_back(usuario); Título: Re: Errores y magia en vector<> C++ Publicado por: Kaxperday en 6 Julio 2015, 18:08 pm Dicho y hecho, gracias socio.
|