• Sábado 14 de Diciembre de 2024, 20:52

Autor Tema:  Fallo RarÍsimo Del Dev-c++  (Leído 4994 veces)

tonilope

  • Miembro activo
  • **
  • Mensajes: 51
    • Ver Perfil
Fallo RarÍsimo Del Dev-c++
« en: Jueves 29 de Junio de 2006, 19:12 »
0
Empezamos...

Si compilo:

Código: Text
  1.  
  2. #include <stdio.h>
  3.  
  4. int main(int argc, char **argv)
  5. {
  6.   int *a;
  7.   char caca[16];
  8.  
  9.   *a=456;
  10.   printf("%d", *a);
  11.  
  12.   return 0;
  13. }
  14.  
  15.  

al ejecutar "casca".

Pero si en vez de eso compilo:

Código: Text
  1.  
  2. #include <stdio.h>
  3.  
  4. int main(int argc, char **argv)
  5. {
  6.   int *a;
  7.  
  8.   *a=456;
  9.   printf("%d", *a);
  10.  
  11.   return 0;
  12. }
  13.  
  14.  

funciona perfectamente.

Pero aún hay más, si en vez de lo anterior pruebo con:

Código: Text
  1.  
  2. #include <stdio.h>
  3.  
  4. int main(int argc, char **argv)
  5. {
  6.   char caca[16];
  7.  
  8.   return 0;
  9. }
  10.  
  11.  

funciona sin problemas.

¿Alguien me explica qué pasa? ¿Es cosa del Dev-c++ (4.9.8.0), de Win2k, o de mi CPU?

Os rogaría que probárais a compilarlo con Dev-c++ (he probado con LCC-Win32 y no pasa)

¿Duendes  :huh:  :huh: ?

Salu2 ;)

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Fallo RarÍsimo Del Dev-c++
« Respuesta #1 en: Jueves 29 de Junio de 2006, 19:24 »
0
y que error te arroja?
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

tonilope

  • Miembro activo
  • **
  • Mensajes: 51
    • Ver Perfil
Re: Fallo RarÍsimo Del Dev-c++
« Respuesta #2 en: Jueves 29 de Junio de 2006, 19:27 »
0
Me sale esto:


Salu2 ;)

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Fallo RarÍsimo Del Dev-c++
« Respuesta #3 en: Jueves 29 de Junio de 2006, 20:45 »
0
Ese codigo falla por logica simplemente, los dos primeros estan errados. ¿Cual es el valor del puntero a? ¿Indefinido? Si tratamos de acceder a ese valor lo mas probable es que se produzca una excepcion por acceder a una direccion de memoria invalida.

Esta linea esta mal:
Código: Text
  1.  
  2.  *a=456;
  3.  
  4.  

Esto ya seria otra cosa:
Código: Text
  1.  
  2.  int b = 56;
  3.  int *a = &b;
  4.  printf("%d\r\n", *a);
  5.  *a=456;
  6.  printf("%d", *a);
  7.  
  8.  

¿Que estas tratando de hacer exactamente?

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

tonilope

  • Miembro activo
  • **
  • Mensajes: 51
    • Ver Perfil
Re: Fallo RarÍsimo Del Dev-c++
« Respuesta #4 en: Jueves 29 de Junio de 2006, 21:16 »
0
Tienes razón en lo que dices del puntero. Al declararlo no apunta a ningún sitio, pero ¿cómo es que funciona si quito la línea char caca[16];?

Salu2 ;)

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Fallo RarÍsimo Del Dev-c++
« Respuesta #5 en: Jueves 29 de Junio de 2006, 21:20 »
0
No puedo creer que el Dev C++ se reviente con algo tan simple como eso  :huh: , deberia mostrarte el error... de razón que no lo podias resolver facilmente por ti mismo si nisiquiera te daba error... o sera que ya me acostumbre a los compiladores de .NET  :lol: y sus safe types.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Fallo RarÍsimo Del Dev-c++
« Respuesta #6 en: Jueves 29 de Junio de 2006, 21:43 »
0
Cita de: "tonilope"
Tienes razón en lo que dices del puntero. Al declararlo no apunta a ningún sitio, pero ¿cómo es que funciona si quito la línea char caca[16];?

Salu2 ;)
Casualidad ... no lo voy a probar ya que es una perdida de tiempo.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Fallo RarÍsimo Del Dev-c++
« Respuesta #7 en: Jueves 29 de Junio de 2006, 21:44 »
0
Cita de: "JuanK"
No puedo creer que el Dev C++ se reviente con algo tan simple como eso  :huh: , deberia mostrarte el error... de razón que no lo podias resolver facilmente por ti mismo si nisiquiera te daba error... o sera que ya me acostumbre a los compiladores de .NET  :lol: y sus safe types.
Esto no es culpa de un compilador en particular, el programa hace exactamente lo que se le dice ... esta mal hecho  :whistling:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Fallo RarÍsimo Del Dev-c++
« Respuesta #8 en: Jueves 29 de Junio de 2006, 21:53 »
0
Cita de: "tonilope"
Me sale esto:


Salu2 ;)
En compiladores como este es probable que sea normal, pero en tecnologias .net esto no sucede muy a menudo pues en tiempo de compilacion te saca error puesto que el hace comprobaciones alrededor de las asignaciones realizadas.

Desde luego en compiladores delenguajes ya viejos que no son safe type como C y C++ y otros si se dan esta clase errores que son entre otras cosas una de sus grandes desventajas frente a las tecnologias modernas. Desde luego que el programa esta mal hecho.

aunque a decir verdad a primera impresion esperaba que el compilador le advirtiera que estaba usando un puntero sin 'inicializar'... que desde luego no sucederia en este compilador de lenguaje C C++ y de zseguro en ningun compilador de C C++. Pero es algo muy habitual en mejores entornos.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Fallo RarÍsimo Del Dev-c++
« Respuesta #9 en: Jueves 29 de Junio de 2006, 22:01 »
0
Cita de: "Eternal Idol"
Cita de: "JuanK"
No puedo creer que el Dev C++ se reviente con algo tan simple como eso  :huh: , deberia mostrarte el error... de razón que no lo podias resolver facilmente por ti mismo si nisiquiera te daba error... o sera que ya me acostumbre a los compiladores de .NET  :lol: y sus safe types.
Esto no es culpa de un compilador en particular, el programa hace exactamente lo que se le dice ... esta mal hecho  :whistling:
Cita de: "Yo"
No puedo creer que el Dev C++ se reviente con algo tan simple como eso huh.gif , deberia mostrarte el error... de razón que no lo podias resolver facilmente por ti mismo si nisiquiera te daba error... o sera que ya me acostumbre a los compiladores de .NET laugh.gif y sus safe types.


De hecho compilando lenguaje C bajo Visual Studio .net 2005 lo trata como warning y si  elevamos el warning level lo tratara como error.  :whistling:  :
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Fallo RarÍsimo Del Dev-c++
« Respuesta #10 en: Jueves 29 de Junio de 2006, 22:12 »
0
Si, VC++ da un warning (un aviso) y por defecto compila lo que el codigo le dice. Lo que quiero decir es que el problema esta en el programa y no en el compilador, no me parece que sea el objetivo del compilador arreglar los errores del programador ... aunque cada vez lo hagan mas.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Fallo RarÍsimo Del Dev-c++
« Respuesta #11 en: Jueves 29 de Junio de 2006, 22:16 »
0
Cita de: "Eternal Idol"
Si, VC++ da un warning (un aviso) y por defecto compila lo que el codigo le dice. Lo que quiero decir es que el problema esta en el programa y no en el compilador, no me parece que sea el objetivo del compilador arreglar los errores del programador ... aunque cada vez lo hagan mas.
Bueno eso es otra cosa, en parte tienes razón pero por confiar en la destreza humana es que los programas hechos con herramientas de 4 generacion para atras tienen tantos problemas de mto. Los de 5 ( aunque no estoy muy seguro en el caso de java) tienen validacion de tipos seguros como parte de la especificacion del lenguaje , asi que los compiladores por eso tratann (y deben) de absorver al maximo ese margen de error inevitable en la destreza humana.

Desde luego que en el caso de este post el error se debe mucho a la inexperiencia tonilope... ya aprendera :P.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Fallo RarÍsimo Del Dev-c++
« Respuesta #12 en: Jueves 29 de Junio de 2006, 23:47 »
0
El error que aparece no es un error mostrado por Dev-C++, es un error mostrado por Windows cuando el programa falla.

Sobre lo que comenta juank que VC muestra un warning, ¿en qué línea lo muestra?

Saludos,
JJ (Geo).
La imaginación es el límite.
Hardware & Software | Mexchip

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Fallo RarÍsimo Del Dev-c++
« Respuesta #13 en: Jueves 29 de Junio de 2006, 23:56 »
0
*a=456;
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Fallo RarÍsimo Del Dev-c++
« Respuesta #14 en: Viernes 30 de Junio de 2006, 00:10 »
0
Ok, ya chequé la opción en GCC (MinGW es un port de este), para evitarte problemas lo mejor es compilar siempre usando -Wall, pero para este programa no mostró nada :P, aunque si usando -O.

Código: Text
  1.  
  2. #include <stdio.h>
  3.  
  4. int main(int argc, char **argv)
  5. {
  6.  int *a;
  7.  char caca[16];
  8.  
  9. *a=456;
  10. printf("%d", *a);
  11.  
  12.  return 0;
  13. }
  14.  
  15.  

Compilando:
Citar
gcc codigo.c -Wall -O

Salida:
Citar
codigo.c: En la función ‘main’:
codigo.c:6: aviso: variable ‘caca’ sin uso
codigo.c:8: aviso: se utiliza ‘a’ sin inicializar en esta función

Entonces, prueba compilando en Dev-C++ agregando las opciones -Wall y -O a los comandos del compilador.

Saludos,
JJ (Geo).
La imaginación es el límite.
Hardware & Software | Mexchip

tonilope

  • Miembro activo
  • **
  • Mensajes: 51
    • Ver Perfil
Re: Fallo RarÍsimo Del Dev-c++
« Respuesta #15 en: Viernes 30 de Junio de 2006, 01:02 »
0
Añadiendo -Wall -O a la compilación me da el warning. "Misterio" resuelto. Gracias a todos.

Salu2 ;)

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Fallo RarÍsimo Del Dev-c++
« Respuesta #16 en: Viernes 30 de Junio de 2006, 05:44 »
0
Cita de: "Geo"
Ok, ya chequé la opción en GCC (MinGW es un port de este), para evitarte problemas lo mejor es compilar siempre usando -Wall, pero para este programa no mostró nada :P, aunque si usando -O.

Código: Text
  1.  
  2. #include <stdio.h>
  3.  
  4. int main(int argc, char **argv)
  5. {
  6.  int *a;
  7.  char caca[16];
  8.  
  9. *a=456;
  10. printf("%d", *a);
  11.  
  12.  return 0;
  13. }
  14.  
  15.  

Compilando:
Citar
gcc codigo.c -Wall -O

Salida:
Citar
codigo.c: En la función ‘main’:
codigo.c:6: aviso: variable ‘caca’ sin uso
codigo.c:8: aviso: se utiliza ‘a’ sin inicializar en esta función

Entonces, prueba compilando en Dev-C++ agregando las opciones -Wall y -O a los comandos del compilador.

Saludos,
JJ (Geo).
Excelente aporte GEo.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Fallo RarÍsimo Del Dev-c++
« Respuesta #17 en: Sábado 1 de Julio de 2006, 02:20 »
0
Gracias JuanK :).

Sólo falta aclarar qué hace -Wall y -O.

-Wall activa la mayoría de mensajes de advertencia (avisos) del compilador, entre ellos  -Wuninitialized, que es la opción que hace que se muestren avisos cuando se intenta utilizar una variable sin inicializar. Sin embargo, los mensajes activados por esta opción (-Wuninitialized) no aparecen a menos que se compile con optimización, por ello también es necesaria la opción -O.

-O activa la optimización, estas son las diferentes opciones:
-O y -O1, optimizar.
-O2, optimizar más.
-O3, optimizar aún más.
-O0, no optimizar. Opción por defecto.
-Os, optimizar el tamaño.

Más info en la página del manual de GCC:
Options to Request or Suppress Warnings
Options that Control Optimization


Saludos,
JJ (Geo).
La imaginación es el límite.
Hardware & Software | Mexchip