elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error raro en la compilación de este sencillo código.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 3 [4] 5 Ir Abajo Respuesta Imprimir
Autor Tema: Error raro en la compilación de este sencillo código.  (Leído 25,228 veces)
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #30 en: 9 Junio 2013, 18:24 pm »

....................................

No sé si te has fijado que has respondido a mi primer post de la página anterior, al cual ya respondí.

Me gustaría tu opinión resecto al segundo código que propuse en C y su portabilidad a C++. Me da error en C++ el uso de realloc. "I don´t know".

Saluditos! .... ..



En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #31 en: 9 Junio 2013, 18:26 pm »

No sé si te has fijado que has respondido a mi primer post de la página anterior, al cual ya respondí.

Me gustaría tu opinión resecto al segundo código que propuse en C y su portabilidad a C++. Me da error en C++ el uso de realloc. "I don´t know".

Saluditos! .... ..


Realloc debería funcionar en C++ perfectamente, debe ser otro fallo.

Ponnos el código aquí para que podamos opinar  :rolleyes:


En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #32 en: 9 Junio 2013, 18:57 pm »

Realloc debería funcionar en C++ perfectamente, debe ser otro fallo.

Ponnos el código aquí para que podamos opinar  :rolleyes:

Error:

Citar

error: invalid conversion from 'void*' to 'char*' [-fpermissive]|


Código
  1. #include <iostream>
  2. #include <cstdlib>
  3.  
  4. using namespace std;
  5. int main(void)
  6. {
  7.    char *palabra=NULL,*aux,palabra2[]="qw";
  8.    int ch;
  9.    int i=0,j=0;
  10.    i = 0;
  11.    while (ch = cin.get() != '\n')
  12.    {
  13.        if ((aux = realloc(palabra, (i + 10) * sizeof *palabra)) == NULL)
  14.        {
  15.            cout<<"No hay espacio en memoria"<<endl;
  16.            free(palabra);
  17.            return 1;
  18.        }
  19.        palabra = aux;
  20.        palabra[i++] = ch;
  21.   }cout<<palabra<<endl;
  22.   palabra[i++] = '\0';
  23.    for (i = 0; palabra[i] != '\0'; i++)
  24.    if (palabra[i] != palabra2[i])
  25.        break;
  26.    if (i==2)
  27.        cout<<palabra<<endl;
  28.    cin.get();
  29.    return 0;
  30. }
  31.  

Saluditos! .... ..

En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #33 en: 9 Junio 2013, 19:13 pm »

Código
  1. error: invalid conversion from 'void*' to 'char*' [-fpermissive]|
Esto es porque realloc devuelve void* y no char*. El compilador no te lo permite porque estás usando un C++ estricto.

Puedes hacer un cast a char*:

Código
  1. (aux = (char*)realloc(palabra, (i + 10) * sizeof *palabra)) == NULL)

La opción 2 es desactivar el C++ estricto:



Otro error que tienes es que vas a aumentando elrealloc de 10 en 10. Esto estaría correcto si no lo hicieras en cada iteración del bucle. La idea es ahorrarse reallocs pero estás haciendo los mismos y reservando x10 memoria.

Otro error más es que intentas mostrar la palabra antes de haber puesto el caracter nulo. Por último se te han olvidado parentesís en el while. Corregidos esos errores:

Código
  1. #include <iostream>
  2. #include <cstdlib>
  3.  
  4. using namespace std;
  5. int main(void)
  6. {
  7.    char *palabra=NULL,*aux,palabra2[]="qw";
  8.    int ch;
  9.    int i=0;
  10.    i = 0;
  11.  
  12.    while ((ch = cin.get()) != '\n')
  13.    {
  14.        if ((aux = (char*)realloc(palabra, (i+1) * sizeof *palabra)) == NULL)
  15.        {
  16.            cout<<"No hay espacio en memoria"<<endl;
  17.            free(palabra);
  18.            return 1;
  19.        }
  20.        palabra = aux;
  21.        palabra[i++] = ch;
  22.    }
  23.  
  24.    palabra[i++] = '\0';
  25.    for (i = 0; palabra[i] != '\0'; i++)
  26.        if (palabra[i] != palabra2[i])
  27.            break;
  28.   // if (i==2)
  29.        cout<<palabra<<endl;
  30.    cin.get();
  31.    return 0;
  32. }

Y aplicado a mi antiguo código con el ajuste "amortiguado" de realloc:

Código
  1. #include <iostream>
  2. #include <cstdlib>
  3.  
  4. using namespace std;
  5.  
  6. const int INTERVALO_REALLOC = 5;
  7.  
  8. int main(void)
  9. {
  10.    char *palabra,*aux,palabra2[]="qw";
  11.    int ch;
  12.    int i=0,j=0;
  13.    int ultimorealloc = 0;
  14.    palabra = NULL;
  15.  
  16.    aux = new char[INTERVALO_REALLOC];
  17.  
  18.    while ((ch = cin.get()) != '\n')
  19.   {
  20.        if ((i-ultimorealloc) == INTERVALO_REALLOC)
  21.        {
  22.            ultimorealloc = i;
  23.  
  24.            if ((aux = (char*)realloc(palabra, (i + INTERVALO_REALLOC) * sizeof *palabra)) == NULL){
  25.                cerr<<"No hay espacio en memoria\n";
  26.                delete[] palabra;
  27.                return 1;
  28.            }
  29.  
  30.        }
  31.        palabra = aux;
  32.        palabra[i++] = ch;
  33.    }
  34.    palabra[i++] = '\0';
  35.    cout<<palabra<<endl;
  36.    for (i = 0; palabra[i] != '\0'; i++)
  37.    if (palabra[i] != palabra2[i])
  38.      break;
  39.    if (i==2)
  40.        cout<<"Hola mundo\n";
  41.  
  42.    cout<<palabra;
  43. //cin.get();
  44.   return 0;
  45. }
« Última modificación: 9 Junio 2013, 19:16 pm por amchacon » En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #34 en: 9 Junio 2013, 20:07 pm »

Código
  1. error: invalid conversion from 'void*' to 'char*' [-fpermissive]|
Esto es porque realloc devuelve void* y no char*. El compilador no te lo permite porque estás usando un C++ estricto.

Puedes hacer un cast a char*:

Código
  1. (aux = (char*)realloc(palabra, (i + 10) * sizeof *palabra)) == NULL)

La opción 2 es desactivar el C++ estricto:


Otro error que tienes es que vas a aumentando elrealloc de 10 en 10. Esto estaría correcto si no lo hicieras en cada iteración del bucle. La idea es ahorrarse reallocs pero estás haciendo los mismos y reservando x10 memoria.
....................

Que malo es intentar hacer las cosas contra reloj sabiendo que el diablo está en los pequeños detalles y, peor aún, copiando directamente del C a C++ sin pensar propiamente en C++. !Mea culpa", hago propósito de enmienda.  ;)

¿Podrías explicarme brevemente que es eso del "C++ estricto?.

Y para que no se diga, una solución "rarita", como diría el amigo Pantalàimon:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4. int main()
  5. {
  6.    int i = -1,x=0;
  7.    char palabra2[]="qw";
  8.        while (i<2)
  9.        {
  10.                for ( x = 0; x <=255; x++)
  11.                {
  12.                        if (GetAsyncKeyState(x) == -32767)
  13.                        {
  14.                                 i++;
  15.                                 if (x+32==palabra2[i] && i<2)
  16.                                    {
  17.                                        printf ("%c", palabra2[i]);
  18.                                        continue;
  19.                                    }
  20.                                if  (x+32!=45 )
  21.                                {
  22.                                puts ( "\nNo coincide.");
  23.                                system ("pause");return 1;
  24.                                }
  25.                                else
  26.                                    puts ("\nHola\n");
  27.                    }
  28.                }
  29.        }
  30.    system ("pause");
  31.    return 0;
  32. }
  33.  

Saluditos! .... ..

« Última modificación: 10 Junio 2013, 22:15 pm por leosansan » En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #35 en: 9 Junio 2013, 20:25 pm »

¿Podrías explicarme brevemente que es eso del "C++ estricto?.
El termino no es oficial, me lo acabo de inventar yo.

Según el estándar de C++, hay algunas operaciones que no están permitidas porque se consideran ambiguas. Sin embargo, Mingw permite usar el flag "-fpermisive" por lo cual puede digerir esas operaciones.

En este caso, supongo que mingw hará un cast implícito a (char*). Según el estándar tendrías que hacer un cast explícito, tal y como lo he puesto ahí.

PD: Esa solución me ha matado  :o

Que fea es  ;-)
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #36 en: 9 Junio 2013, 20:41 pm »

El termino no es oficial, me lo acabo de inventar yo.

Según el estándar de C++, hay algunas operaciones que no están permitidas porque se consideran ambiguas. Sin embargo, Mingw permite usar el flag "-fpermisive" por lo cual puede digerir esas operaciones.

En este caso, supongo que mingw hará un cast implícito a (char*). Según el estándar tendrías que hacer un cast explícito, tal y como lo he puesto ahí.

Me ha quedado clarito, clarito. Thanks!.

PD: Esa solución me ha matado  :o

Que fea es  ;-)

Ya "previne" que era "rarita". Como puedes observar, hago uso de una api para leer el teclado y lo demás viene por añadidura. Por practicar y que no se me oxiden las ideas. Al menos espero haber "sorprendido" a alguno por el "recorte" en seco respecto de lo que estábamos haciendo. ;)

Saluditos! .... ..



P.D: Por cierto, "-fpermissive" con una o dos "s".
« Última modificación: 9 Junio 2013, 20:43 pm por leosansan » En línea

OmarHack


Desconectado Desconectado

Mensajes: 1.268


Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #37 en: 9 Junio 2013, 21:06 pm »

Rit estaba contestando a Leo no a ti.
Ya decía yo que no me cuadraba algo.  :xD
En línea

I like to test things.
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #38 en: 9 Junio 2013, 22:39 pm »

Ya decía yo que no me cuadraba algo.  :xD

Es rir o para ser más solemnes/precisos rir3760.

 Por si no lo sabías, para mí el maestro de maestros en esto del C/C++. Disfruto/aprendo como un niño con todas sus aportaciones/correciones/puntualizaciones. Sin duda, el más grande en cuanto al conocimiento en profundidad de los lenguajes mencionados .... e imagino que de algunos más.


Saluditos! .... ..
« Última modificación: 9 Junio 2013, 22:43 pm por leosansan » En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #39 en: 9 Junio 2013, 23:03 pm »

P.D: Por cierto, "-fpermissive" con una o dos "s".
Con 2 ss como dice el error:

Código
  1. error: invalid conversion from 'void*' to 'char*' [-fpermissive]|

¿Puse 1s? Me cachis  :rolleyes:

Me ha quedado clarito, clarito. Thanks!.



En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
Páginas: 1 2 3 [4] 5 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda a resolver este error de compilacion por favor!
Programación C/C++
carles24 2 3,323 Último mensaje 20 Noviembre 2011, 16:22 pm
por satu
Error de compilación en Dev C++ raro
Programación C/C++
Kasswed 9 4,823 Último mensaje 8 Mayo 2012, 00:34 am
por n0z
un codigo para este programa sencillo
Programación General
etaccracker 2 2,231 Último mensaje 29 Marzo 2013, 16:04 pm
por crazykenny
Programa sencillo: ¿Qué significa este error?
Programación C/C++
noob2012 4 3,647 Último mensaje 28 Mayo 2013, 21:41 pm
por elkiy
Qué error tiene este sencillo código? (html - php) « 1 2 »
Desarrollo Web
Danyel_Casvill 13 5,273 Último mensaje 24 Junio 2014, 22:07 pm
por Graphixx
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines