Adoro la lógica, que todo cuadre, que cuando ocurre algo digas «Ves? Tal y como lo había previsto». Hoy acabo de descubrir algo que entra dentro de la gran cantidad de cosas lógicas que ocurren en la vida. Os dejo aquí mi nuevo teorema, recién descubierto:
«La suma de las partes es MENOR que el total»
¿Suena complicado? Nada más lejos de la realidad, veamos ejemplos chorrones:
1. Tengo 10 saquitos pequeños cerrados, con cada uno 10 canicas. Pues bien, en total suman 100 canicas. Eso es obvio. Ahora los meto en una bolsa de plástico, para transportarlos más cómodamente. ¿Cuántas canicas tengo ahora? Pues, en contra de lo que muchos podréis pensar, según mi nuevo teorema, ahora tengo 127 canicas.
2. Mis 12 abuelas me dan cada mes una propina de 10 euros cada una. Así que yo, como buen nieto, las visito cada mes para recoger el dinero, y vuelvo a casa con 120 euros. Pero resulta que este mes no he podido ir, así que he mandado a mi madre para que coja el dinero por mí. ¿Cuánto dinero me da mi madre? Podréis pensar que 120 euros, menos una pequeña comisión porque igual mi madre saca beneficio de la transacción pero… curiosamente mi madre me da los «150 euros» que ha recogido de mis 12 abuelas.
3. Los 5 amigos que somos en la pandilla ponemos 20 euros al principio de la noche cada vez que salimos juntos. ¿Alguien diría que juntamos 100 euros? ¡No! Según mi teorema, podremos gastarnos 80 euros en la cena, y luego otros 60 en cubatas, sin necesidad de que ninguno ponga más dinero.
Como véis, éste nuevo y revolucionario invento nos trae felicidad, ya que crece dinero de la nada. Ójala todo fuera así de fácil, la verdad.
Y ahora, para los frikis cepesianos que lean esto, os voy a poner un ejemplo REAL que acaba de pasarme en Hendrix:
Tengo una estructura con varios campos. 2 de ellos son estructuras con 3 cadenas de 30 caracteres cada una, y después hay un entero, un vector de 4 caracteres y otro de dos. (Suena lioso, pero es sólo dibujárselo).
Ahora hacemos un printf, para que nos muestre los tamaños de los 5 campos, y obtenemos en pantalla algo como esto:
90 90 4 4 2
Aparentemente correcto: 3 cadenas de 30 caracteres (dos veces), un entero, un vector de 4 caracteres y otro de dos.
Ahora hacemos otro printf con el tamaño total de la estructura y ¿qué obtenemos?
192
¿Alguien puede decirme qué pasa aquí? Han sido 4 horas mirando el mismo trozo de código. Es bastante simple, sólo hay 2 printfs, nada más. Lo demás son las definiciones de la estructura «CHACHI» (revisada muy cautelosamente).
¿Cigarros que solucionan errores de compilación? ¿Estructuras que miden más que las sumas de sus campos? Como alguien se atreva a decirme que la programación es «pensar bien tu código antes de escribir, y todo irá sobre ruedas», caerá sobre él toda la ira de D. Loixiyo.
Y ya está 🙂
Ahora me voy a dormir, que esto me satura.
Podrías mostrar el codigo?
Madre mía…
Revisando mucho y con ayuda de un sabio en la materia, hemos descubierto que el problema no estaba en el código. Tiene que ver con cómo quedan los structs en memoria, que lo alinea en bloques de 4 bytes o no sé que movidas…
Así que problema resuelto, hemos ajustado el tamaño de las cosas (aunque en principio no creo que hubiera tenido que darnos problemas). Eso sí… manda c*j*n*s que en una cosa tan tonta como definirte una estructura tengas que estar pensando «cómo se guarda internamente» para que te funcione…
Pero muchas gracias!
simplemente dire… ¿qué?
jajaja… que guay eh… yo ayer me pegue dos horicas mirando la pantalla y pensando porque si tenía una tabla de asientos (A1, B1, …) y solo los intentaba mostrar por pantalla me mostraba A1B1…, B1C1…, C1
y me los concatenaba y despues de mucho rato descubri que estaban defininos como char[2] y no daban lugar al \n por eso al mostrarlo se concatenaban… fue un bonito tiempo desperdiciado, xD
Es divertido cuando no cuentas con cosas de estas y luego pierdes tiempo y tiempo hasta que se te ocurre por mirar en otro lado…
En merlin siempre pasan esas cosas, esa basura de máquina usa las librerías más antiguas, de cuando se inventaron esos lenguajes de programación. Y con las librerías matemáticas hay veces que flipas con los resultados que dan, y con las de ficheros, y…
Los lenguajes de verdad (Sobre todo fuera de merlin…) dejan de dar esos estúpidos problemas que te hacen perder literalmente esas 4 horas.
Por cierto, he encontrado tu blog por casualidad y visto que también tienes tu particular odio hacia los métodos del estupendo Centro Politécnico Inferior de Zaragoza, te invito a que pases por PutoCPS.com, por si quieres despotricar con algunas de esas surrealistas experiencias que sólo se ven en ese puto centro.
Salu2!
El problema de Mérlin, Jendris y sus primos es que no actualizan los compiladores, y dan problemas que con compiladores actuales no darían.
De todas formas, todo hay que decirlo: TODOS los errores que he tenido, son errores de mi código (aunque muchas veces no tan evidentes).
Sí, conozco tu página, he entrado alguna vez, aunque no he comentado.
La verdad es que algunas en algunas de las cosas que ponéis estoy de acuerdo, pero las formas quitan la credibilidad.
Mi humilde consejo, desde Anda a cascala!, es que una protesta BIEN escrita llega mucho más lejos que un deseo de «cancer ocular».
Y ya está 🙂
Veamos:
El tema de la alineacion de datos en estructuras en C es algo de toda la vida, y no depende de que se usen arquitecturas ni compiladores mas o menos nuevos (y, evidentemente, mucho menos de versiones de librerias):
http://en.wikipedia.org/wiki/Data_structure_alignment
Por ejemplo, en un Linux 2.6.18 sobre Intel Core2 Quad Q9450 con gcc 4.1.2, (supongo que se puede considerar algo «moderno») tenemos
sizeof(char+short)=4
sizeof(char)+sizeof(short)=3
En fin, asi es la vida (que dirian La Polla Records)
Anda, entro a este blog y de nuevo el magistral autor de putocps.com aprovechando cualquier oportunidad para darse publicidad y buscar seguidores en los comentarios.
Demuestra su entera ignorancia acerca de la alineación de los structs C en memoria y echa la culpa al CPS otra vez (cómo no). Ahora a dos pobres máquinas, merlin y hendrix.
Todo porque no sabe lo que es un struct en C y cómo se alínea.
Con elementos como estos es cierto que la formación del CPS deja bastante que desear…
Yo tampoco lo sabía en principio, porque eso no se me explicó.
Sí que es verdad que gracias a un colega lo aprendí, y después de aquella lección NO LO OLVIDARÉ nunca más, jejej.
De todas formas, sí que es cierto que el CPS es como es… A putocps.com no le falta razón en muchas cosas que dice, aunque no tiene las formas que yo usaría.
Hola Manolo querido, espero que no seas aquél con IP 193.200.150.137 y otras tantas que acaban en distinto número (Proxy :P) que entró a mi blog a dar la brasa con 6 nicks distintos, pues veo que sigues en tu línea persiguiendo mis intervenciones por la red xD
Entendí bien en su día lo que es un struct en C y cómo se alinea, y gracias a dios ahora programo con lenguajes útiles que no se enseñan en el CPS y en los que puedes abstraerte de la arquitectura para programar, entre otras cosas… Menos mal…
En mi anterior comentario simplemente dí la razón a mi amiguito loixiyo y a su colega fri sobre las pérdidas de tiempo que suponen trabajar en merlin (Eso lo saben hasta los negros de África como quien dice), y puse como ejemplo especial el de las librerías matemáticas, pero no hablemos ya de las de conversión de strings formateadas a int o float y viceversa, que terminas teniendo que programarlas a mano tras perder un precioso tiempo comprobando que no funcionan bien :S al final se termina la práctica de 2 horas y justo tienes las funciones para formatear cadenas que debiste tener desde un principio, ¡El CPS siempre a la vanguardia de la enseñanza!
Lo más gracioso es que después de 20 años impartiendo la misma asignatura sin cambiar las prácticas algunos profesores no sean capaces de avisarte de esos errores típicos… Entre los que se puede incluir el del alineamiento de structs a nivel de word con el que tiempo ha sin duda también topé.
Y en fin, nada más que decir, gracias loixiyo por tu útlimo comentario sobre mi bloguito, y es que lo reconozco, en PutoCPS.com somos malos malos 😛
Anda…
Ahora la guerra se viene a mi blog? Bueno, bueno… Pues nada, yo a escuchar