Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: sanxez1 en 11 Septiembre 2016, 20:48 pm



Título: el programa dejó de funconar correctamente por un problema.
Publicado por: sanxez1 en 11 Septiembre 2016, 20:48 pm
Cuando trato de ejecutar el siguiente programa en c++ me sale el error:

el programa dejó de funcionar correctamente por un problema. Windows cerrará el programa y le notificará si existe una solución.

el compilador no me da ningún problema el código es el siguiente:
Código:
#include <stdio.h>
#include <stdlib.h>
#include <allegro.h>
#include <iostream>

int iniciar();
void realizar_juego();
void terminar();

int iniciar(){
allegro_init();
install_keyboard();
set_color_depth(16);
if (set_gfx_mode(GFX_AUTODETECT,640,480,0,0)<0){
printf("error al iniciar el modo grafico\n");
allegro_exit();
exit(-1);
}
}

void terminar(){
allegro_exit();
}
int main(){
iniciar();
realizar_juego();
terminar();
}
END_OF_MAIN()
void realizar_juego(){

BITMAP *nave;
PALETTE paleta;
int x,y, x_anterior, y_anterior;
BITMAP * buffer;


nave=load_bitmap("C:/Users/DANIEL/Desktop/Programación/C++/Allegro/Naves/recursos/nave.pcx", paleta);
set_palette(paleta);
if (nave==NULL) terminar();
buffer=create_bitmap(nave->w,nave->h);
clear (buffer);
if (buffer==NULL) terminar();
x=SCREEN_W/2;
y=SCREEN_H/2;

while (!key[KEY_ESC]){

if (key[KEY_UP,KEY_W])
y--;
if (key[KEY_DOWN,KEY_S])
y++;
if (key[KEY_LEFT,KEY_A])
x--;
if (key[KEY_RIGHT,KEY_D])
x++;

if (x<0) x=x_anterior;
if (x>SCREEN_W-nave->w) x=x_anterior;
if (y<0) y=y_anterior;
if (y>SCREEN_H-nave->h) y=y_anterior;
if ((x_anterior!=x) || (y_anterior!=y)){
blit (buffer,screen, 0, 0, x_anterior, y_anterior,buffer->w,buffer->h);
blit (screen,buffer,x,y,0,0,buffer->w,buffer->h);
draw_sprite(screen,nave, x, y);
}
x_anterior=x;
y_anterior=y;


}
}


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: ivancea96 en 11 Septiembre 2016, 21:06 pm
En primer lugar, localiza la línea que da el error. Para ello, coloca pausas o salidas por consola (con "cout", por ejemplo) en distintas zonas hasta ver dónde falla.
Código
  1. cout << 'a' << flush;
  2. linea_A;
  3. cout << 'b' << flush;
  4. linea_B;
  5. cout << 'c' << flush;
  6. linea_C;

Consola:
Código:
ab

En ese caso, sabríamos que probablemente el error esté en la línea B.


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: sanxez1 en 11 Septiembre 2016, 21:09 pm
el programa ni siquiera ejecuta


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: Poyoncio en 11 Septiembre 2016, 21:13 pm
Para empezar, cuando cierras los { } de la funcion iniciar, al final hay un } de mas   (justo encima de terminar() te falta poner en END_OF_MAIN( ) el caracter ";"
Luego cuando indicas el valor de nave si estas en windows tendrias que tener \\ y no /  (si se trata de trabajar con directorios en windows)
Y en la ultima linea te sobra un }  

Para la proxima, pon las etiquetas Geshi(C++) y te podre indicar la linea exacta
PD: Ademas las librerias que tienes stdio y stdlib tendrian que ser cstdio y cstdlib (de esto no estoy muy seguro, pero creo que es asi)

Saludos


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: ivancea96 en 11 Septiembre 2016, 21:18 pm
Luego cuando indicas el valor de nave si estas en windows tendrias que tener \\ y no /  (si se trata de trabajar con directorios en windows)
Y en la ultima linea te sobra un }  
Ambos sirven, tanto \ como /.
No sobra. Hay 2, uno para el while y otro para la función.

Y sí, cstdlib y cstdio.


Si dices que el programa te ha compilado bien: Por si acaso, borra el ejecutable y compila de nuevo.
Hecho eso, prueba de nuevo lo de los cout, poniéndo uno al principio, para asegurarte de que al menos comienza el programa.


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: Poyoncio en 11 Septiembre 2016, 21:20 pm
Ambos sirven, tanto \ como /.
No sobra. Hay 2, uno para el while y otro para la función.

Y sí, cstdlib y cstdio.


Si dices que el programa te ha compilado bien: Por si acaso, borra el ejecutable y compila de nuevo.
Hecho eso, prueba de nuevo lo de los cout, poniéndo uno al principio, para asegurarte de que al menos comienza el programa.

Lo he vuelto a mirar y hay 3 fijate:
Código
  1.  }
  2.  x_anterior=x;
  3.  y_anterior=y;
  4.  
  5.  
  6. }
  7. }





Me estoy mirando el code de nuevo, tienes un lio tremendo con C y C++ usas stdlib y stdio, ademas de iostream, y luego pones printf.
Podrias especificar en que lenguaje estas programando? Porque alomejor lo que tienes que hacer es quitar el iostream y arreglar los errores de syntaxis y ya estas


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: ivancea96 en 11 Septiembre 2016, 21:27 pm
Lo he vuelto a mirar y hay 3 fijate:
Código
  1.  }
  2.  x_anterior=x;
  3.  y_anterior=y;
  4.  
  5.  
  6. }
  7. }

El primero cierra el if, el segundo cierra el while y el tercero cierra la función.


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: Poyoncio en 11 Septiembre 2016, 21:28 pm
El primero cierra el if, el segundo cierra el while y el tercero cierra la función.
Es verdad, no havia visto el if disculpa ;)


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: sanxez1 en 11 Septiembre 2016, 21:29 pm
he hecho lo de borrar el ejecutable y nada


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: ivancea96 en 11 Septiembre 2016, 21:36 pm
¿Probaste lo de los cout? De ser así, pon aquí el código que probaste.


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: sanxez1 en 11 Septiembre 2016, 21:42 pm
no hice lo de los couts, pero no se a que se refieren


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: Poyoncio en 11 Septiembre 2016, 21:42 pm

Tu problema es que no sabes en que codigo estas. Iostream es una libreria de C++ y stdlib y stdio de C, por tu code parece que estas en C porque pones printf .... asi que crea un archivo y ponle el code en C que te he puesto y lo guardas como fichero.c y lo compilas.

Prueba este codigo si estas en C :
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <allegro.h>
  4.  
  5.  
  6. int iniciar();
  7. void realizar_juego();
  8. void terminar();
  9.  
  10. int iniciar(){
  11. allegro_init();
  12. install_keyboard();
  13. set_color_depth(16);
  14. if (set_gfx_mode(GFX_AUTODETECT,640,480,0,0)<0){
  15. printf("error al iniciar el modo grafico\n");
  16. allegro_exit();
  17. exit(-1);
  18. }
  19. }
  20.  
  21. void terminar(){
  22. allegro_exit();
  23. }
  24. int main(){
  25. iniciar();
  26. realizar_juego();
  27. terminar();
  28. }
  29. END_OF_MAIN();
  30. void realizar_juego(){
  31.  
  32. BITMAP *nave;
  33. PALETTE paleta;
  34. int x,y, x_anterior, y_anterior;
  35. BITMAP * buffer;
  36.  
  37.  
  38. nave=load_bitmap("C:/Users/DANIEL/Desktop/Programación/C++/Allegro/Naves/recursos/nave.pcx", paleta);
  39. set_palette(paleta);
  40. if (nave==NULL) terminar();
  41. buffer=create_bitmap(nave->w,nave->h);
  42. clear (buffer);
  43. if (buffer==NULL) terminar();
  44. x=SCREEN_W/2;
  45. y=SCREEN_H/2;
  46.  
  47. while (!key[KEY_ESC]){
  48.  
  49. if (key[KEY_UP,KEY_W])
  50. y--;
  51. if (key[KEY_DOWN,KEY_S])
  52. y++;
  53. if (key[KEY_LEFT,KEY_A])
  54. x--;
  55. if (key[KEY_RIGHT,KEY_D])
  56. x++;
  57.  
  58. if (x<0) x=x_anterior;
  59. if (x>SCREEN_W-nave->w) x=x_anterior;
  60. if (y<0) y=y_anterior;
  61. if (y>SCREEN_H-nave->h) y=y_anterior;
  62. if ((x_anterior!=x) || (y_anterior!=y)){
  63. blit (buffer,screen, 0, 0, x_anterior, y_anterior,buffer->w,buffer->h);
  64. blit (screen,buffer,x,y,0,0,buffer->w,buffer->h);
  65. draw_sprite(screen,nave, x, y);
  66. }
  67. x_anterior=x;
  68. y_anterior=y;
  69.  
  70.  
  71. }
  72. }
  73.  
  74.  

Y este otro si estas en C++
Código
  1. #include <cstdio.h>
  2. #include <cstdlib.h>
  3. #include <allegro.h>
  4. #include <iostream>
  5. using namespace std;
  6. int iniciar();
  7. void realizar_juego();
  8. void terminar();
  9.  
  10. int iniciar(){
  11. allegro_init();
  12. install_keyboard();
  13. set_color_depth(16);
  14. if (set_gfx_mode(GFX_AUTODETECT,640,480,0,0)<0){
  15. cout << "Error al iniciar el modo grafico" << endl;
  16. allegro_exit();
  17. exit(-1);
  18. }
  19. }
  20.  
  21. void terminar(){
  22. allegro_exit();
  23. }
  24. int main(){
  25. iniciar();
  26. realizar_juego();
  27. terminar();
  28. }
  29. END_OF_MAIN();
  30. void realizar_juego(){
  31.  
  32. BITMAP *nave;
  33. PALETTE paleta;
  34. int x,y, x_anterior, y_anterior;
  35. BITMAP * buffer;
  36.  
  37.  
  38. nave=load_bitmap("C:/Users/DANIEL/Desktop/Programación/C++/Allegro/Naves/recursos/nave.pcx", paleta);
  39. set_palette(paleta);
  40. if (nave==NULL) terminar();
  41. buffer=create_bitmap(nave->w,nave->h);
  42. clear (buffer);
  43. if (buffer==NULL) terminar();
  44. x=SCREEN_W/2;
  45. y=SCREEN_H/2;
  46.  
  47. while (!key[KEY_ESC]){
  48.  
  49. if (key[KEY_UP,KEY_W])
  50. y--;
  51. if (key[KEY_DOWN,KEY_S])
  52. y++;
  53. if (key[KEY_LEFT,KEY_A])
  54. x--;
  55. if (key[KEY_RIGHT,KEY_D])
  56. x++;
  57.  
  58. if (x<0) x=x_anterior;
  59. if (x>SCREEN_W-nave->w) x=x_anterior;
  60. if (y<0) y=y_anterior;
  61. if (y>SCREEN_H-nave->h) y=y_anterior;
  62. if ((x_anterior!=x) || (y_anterior!=y)){
  63. blit (buffer,screen, 0, 0, x_anterior, y_anterior,buffer->w,buffer->h);
  64. blit (screen,buffer,x,y,0,0,buffer->w,buffer->h);
  65. draw_sprite(screen,nave, x, y);
  66. }
  67. x_anterior=x;
  68. y_anterior=y;
  69.  
  70.  
  71. }
  72. }
  73.  
  74.  
  75.  


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: ivancea96 en 11 Septiembre 2016, 21:47 pm
no hice lo de los couts, pero no se a que se refieren

Tienes que localizar qué línea da el error. Para ello hay muchos métodos, y uno es tan simple como ver hasta donde funciona bien. Por ejemplo, con el main, pondrías:
Código
  1. int main(){
  2.    cout << 'a' << endl;
  3.    iniciar();
  4.    cout << 'b' << endl;
  5.    realizar_juego();
  6.    cout << 'c' << endl;
  7.    terminar();
  8.    cout << 'd' << endl;
  9. }

Al ejecutarlo, deberías ver por la consola, letras. Si sale una 'a', el error está en la función "iniciar()". Si sale "ab", el error está en "realizar_juego()", y etc.



Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: sanxez1 en 11 Septiembre 2016, 21:48 pm
estoy en c++ y siempre he utilizado las librerías stdio y stdlib, uso printf porque me resulta más fácil


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: Poyoncio en 11 Septiembre 2016, 21:51 pm
estoy en c++ y siempre he utilizado las librerías stdio y stdlib, uso printf porque me resulta más fácil
Pues nose, si siempre has usado librerias stdio y stdlib nose como te han compilado, como te digo usa cstdio y cstdlib, y lo de printf, precisamente cout es mas facil. No hay que declarar el tipo de dato que vas a mostrar pero eso ya enfuncion de gustos.

Saludos y haznos caso, sino, no se compilara nada


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: ivancea96 en 11 Septiembre 2016, 21:56 pm
Pues nose, si siempre has usado librerias stdio y stdlib nose como te han compilado, como te digo usa cstdio y cstdlib, y lo de printf, precisamente cout es mas facil. No hay que declarar el tipo de dato que vas a mostrar pero eso ya enfuncion de gustos.

Saludos y haznos caso, sino, no se compilara nada

Es recomendable utilizar las de C++, pero normalmente se pueden utilizar también las de C, stdlib.h y etc eh? No hay problema en compilar eso.


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: Poyoncio en 11 Septiembre 2016, 22:02 pm
Es recomendable utilizar las de C++, pero normalmente se pueden utilizar también las de C, stdlib.h y etc eh? No hay problema en compilar eso.
A pues nose, ami me daban errores cuando comence (hace 2 meses o menos) por eso ahora aunque casi nunca las use les tengo un poco de tirria, estuve como 2 dias con el mismo error  :laugh: me volvi loco


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: sanxez1 en 12 Septiembre 2016, 21:41 pm
consegu hacer lo de los couts pero no me sale nngún avso


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: ivancea96 en 12 Septiembre 2016, 21:56 pm
¿Puedes poner aquí el código con los couts?


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: sanxez1 en 18 Septiembre 2016, 12:47 pm
Código:
#include <stdio.h>
#include <stdlib.h>
#include <allegro.h>
 
 
int iniciar();
void realizar_juego();
void terminar();
 
int iniciar(){
allegro_init();
install_keyboard();
set_color_depth(16);
if (set_gfx_mode(GFX_AUTODETECT,640,480,0,0)<0){
printf("error al iniciar el modo grafico\n");
allegro_exit();
exit(-1);
}
}
 
void terminar(){
allegro_exit();
}
int main(){
iniciar();
realizar_juego();
terminar();
}
END_OF_MAIN();
void realizar_juego(){
 
BITMAP *nave;
PALETTE paleta;
int x,y, x_anterior, y_anterior;
BITMAP * buffer;
 
 
nave=load_bitmap("C:/Users/DANIEL/Desktop/Programación/C++/Allegro/Naves/recursos/nave.pcx", paleta);
set_palette(paleta);
if (nave==NULL) terminar();
buffer=create_bitmap(nave->w,nave->h);
clear (buffer);
if (buffer==NULL) terminar();
x=SCREEN_W/2;
y=SCREEN_H/2;
 
while (!key[KEY_ESC]){
 
if (key[KEY_UP,KEY_W])
y--;
if (key[KEY_DOWN,KEY_S])
y++;
if (key[KEY_LEFT,KEY_A])
x--;
if (key[KEY_RIGHT,KEY_D])
x++;
 
if (x<0) x=x_anterior;
if (x>SCREEN_W-nave->w) x=x_anterior;
if (y<0) y=y_anterior;
if (y>SCREEN_H-nave->h) y=y_anterior;
if ((x_anterior!=x) || (y_anterior!=y)){
blit (buffer,screen, 0, 0, x_anterior, y_anterior,buffer->w,buffer->h);
blit (screen,buffer,x,y,0,0,buffer->w,buffer->h);
draw_sprite(screen,nave, x, y);
}
x_anterior=x;
y_anterior=y;
 
 
}
}
 


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: ivancea96 en 18 Septiembre 2016, 13:14 pm
Tienes que localizar qué línea da el error. Para ello hay muchos métodos, y uno es tan simple como ver hasta donde funciona bien. Por ejemplo, con el main, pondrías:
Código
  1. int main(){
  2.    cout << 'a' << endl;
  3.    iniciar();
  4.    cout << 'b' << endl;
  5.    realizar_juego();
  6.    cout << 'c' << endl;
  7.    terminar();
  8.    cout << 'd' << endl;
  9. }

Al ejecutarlo, deberías ver por la consola, letras. Si sale una 'a', el error está en la función "iniciar()". Si sale "ab", el error está en "realizar_juego()", y etc.
¿Puedes poner aquí el código con los couts?
Código:
#include <stdio.h>
#include <stdlib.h>
#include <allegro.h>
 
 
int iniciar();
void realizar_juego();
void terminar();
 
int iniciar(){
allegro_init();
install_keyboard();
set_color_depth(16);
if (set_gfx_mode(GFX_AUTODETECT,640,480,0,0)<0){
printf("error al iniciar el modo grafico\n");
allegro_exit();
exit(-1);
}
}
 
void terminar(){
allegro_exit();
}
int main(){
iniciar();
realizar_juego();
terminar();
}
END_OF_MAIN();
void realizar_juego(){
 
BITMAP *nave;
PALETTE paleta;
int x,y, x_anterior, y_anterior;
BITMAP * buffer;
 
 
nave=load_bitmap("C:/Users/DANIEL/Desktop/Programación/C++/Allegro/Naves/recursos/nave.pcx", paleta);
set_palette(paleta);
if (nave==NULL) terminar();
buffer=create_bitmap(nave->w,nave->h);
clear (buffer);
if (buffer==NULL) terminar();
x=SCREEN_W/2;
y=SCREEN_H/2;
 
while (!key[KEY_ESC]){
 
if (key[KEY_UP,KEY_W])
y--;
if (key[KEY_DOWN,KEY_S])
y++;
if (key[KEY_LEFT,KEY_A])
x--;
if (key[KEY_RIGHT,KEY_D])
x++;
 
if (x<0) x=x_anterior;
if (x>SCREEN_W-nave->w) x=x_anterior;
if (y<0) y=y_anterior;
if (y>SCREEN_H-nave->h) y=y_anterior;
if ((x_anterior!=x) || (y_anterior!=y)){
blit (buffer,screen, 0, 0, x_anterior, y_anterior,buffer->w,buffer->h);
blit (screen,buffer,x,y,0,0,buffer->w,buffer->h);
draw_sprite(screen,nave, x, y);
}
x_anterior=x;
y_anterior=y;
 
 
}
}
 


No tiene los couts ._.
Si lo haces, pon la librería iostream. También puedes hacerlo con printf (poniendo justo después de cada printf un fflush(stdout);


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: sanxez1 en 18 Septiembre 2016, 13:32 pm
ostias que tonto pensé que poyoncio lo había puesto,
Código:
#include <stdio.h>
#include <stdlib.h>
#include <allegro.h>
 
 
int iniciar();
void realizar_juego();
void terminar();
 
int iniciar(){
allegro_init();
install_keyboard();
set_color_depth(16);
if (set_gfx_mode(GFX_AUTODETECT,640,480,0,0)<0){
printf("error al iniciar el modo grafico\n");
allegro_exit();
exit(-1);
}
}
 
void terminar(){
allegro_exit();
}
int main(){
printf("error a");
iniciar();
printf("error b");
realizar_juego();
printf("error c");
terminar();
}
END_OF_MAIN();
void realizar_juego(){
 
BITMAP *nave;
PALETTE paleta;
int x,y, x_anterior, y_anterior;
BITMAP * buffer;
 
 
nave=load_bitmap("C:/Users/DANIEL/Desktop/Programación/C++/Allegro/Naves/recursos/nave.pcx", paleta);
set_palette(paleta);
if (nave==NULL) terminar();
buffer=create_bitmap(nave->w,nave->h);
clear (buffer);
if (buffer==NULL) terminar();
x=SCREEN_W/2;
y=SCREEN_H/2;
 
while (!key[KEY_ESC]){
 
if (key[KEY_UP,KEY_W])
y--;
if (key[KEY_DOWN,KEY_S])
y++;
if (key[KEY_LEFT,KEY_A])
x--;
if (key[KEY_RIGHT,KEY_D])
x++;
 
if (x<0) x=x_anterior;
if (x>SCREEN_W-nave->w) x=x_anterior;
if (y<0) y=y_anterior;
if (y>SCREEN_H-nave->h) y=y_anterior;
if ((x_anterior!=x) || (y_anterior!=y)){
blit (buffer,screen, 0, 0, x_anterior, y_anterior,buffer->w,buffer->h);
blit (screen,buffer,x,y,0,0,buffer->w,buffer->h);
draw_sprite(screen,nave, x, y);
}
x_anterior=x;
y_anterior=y;
 
 
}
}
 
me salen los errores a y b


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: ivancea96 en 18 Septiembre 2016, 16:09 pm
Vale. Ahora, sigue con ese método hasta encontrar la línea exacta que da el error. Ve colocando un par de printf, hasta que veas que uno no se muestra.

Ahora sabes que el error está dentro de realizar_juego. pon printf ahí.

Por cierto, por seguridad, pon printf("a"); fflush(stdout);.
fflush hace que se muestre por pantalla al momento (ya que printf, stdout, utiliza un buffer). Es posible que falle y no se llegue a mostrar por pantalla. Con el fflush, haces que se muestre al momento, cosa importante por aquí xd


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: sanxez1 en 18 Septiembre 2016, 17:20 pm
esta es la linea que me fastidia:
Código:
buffer=create_bitmap(nave->w,nave->h);

pero no se como soluconarlo


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: ivancea96 en 18 Septiembre 2016, 20:15 pm
No estoy seguro, pero si en vez de clear pones "clear_bitmap(...)", sigue igual?


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: sanxez1 en 18 Septiembre 2016, 20:34 pm
si dices así
Código:
	clear_bitmap(buffer);
si, sigue igual


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: ivancea96 en 18 Septiembre 2016, 21:13 pm
Que extraño. Muestra en consola los valores de nave->w y nave->h antes del create_bitmap, a ver si son valores correctos.

EDITO: Wop, cuidado aqui:

Código
  1. nave=load_bitmap("C:/Users/DANIEL/Desktop/Programación/C++/Allegro/Naves/recursos/nave.pcx", paleta);
  2. set_palette(paleta);
  3. if (nave==NULL) terminar();
  4. buffer=create_bitmap(nave->w,nave->h);
  5. clear (buffer);
  6. if (buffer==NULL) terminar();

if(nave == NULL) terminar();
El código va a proseguir, y va a empezar a tirar errores (tal vez). Después del terminar, haz un return:
Código
  1. nave=load_bitmap("C:/Users/DANIEL/Desktop/Programación/C++/Allegro/Naves/recursos/nave.pcx", paleta);
  2. set_palette(paleta);
  3. if (nave==NULL){
  4.    terminar();
  5.    return;
  6. }
  7. buffer=create_bitmap(nave->w,nave->h);
  8. clear (buffer);
  9. if (buffer==NULL){
  10.    terminar();
  11.    return;
  12. }

O mejor aun: terminar() lo llamas al final del main, asi que no lo llames ahí, o será llamado 2 veces. Simplemente, pon el return.

Código
  1. nave=load_bitmap("C:/Users/DANIEL/Desktop/Programación/C++/Allegro/Naves/recursos/nave.pcx", paleta);
  2. set_palette(paleta);
  3. if (nave==NULL){
  4.    return;
  5. }
  6. buffer=create_bitmap(nave->w,nave->h);
  7. clear (buffer);
  8. if (buffer==NULL){
  9.    return;
  10. }


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: sanxez1 en 18 Septiembre 2016, 22:26 pm
va por ahí, he puesto que me dijese error c al ir a terminar y me ha salido que hago???


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: ivancea96 en 19 Septiembre 2016, 19:42 pm
Pues nuevamente, encontrar dónde falla.

Intuyo que falla en:
Código
  1. nave=load_bitmap("C:/Users/DANIEL/Desktop/Programación/C++/Allegro/Naves/recursos/nave.pcx", paleta);
Verifícalo.

Si es eso, fíjate que el pcx exista y que la ruta sea correcta.

http://liballeg.org/stabledocs/en/alleg010.html#load_bitmap (http://liballeg.org/stabledocs/en/alleg010.html#load_bitmap)


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: sanxez1 en 25 Septiembre 2016, 18:21 pm
existe, pero no se que le pasa, llevo dias dandole vueltas y no lo consigo ayudadme, xfa


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: ivancea96 en 25 Septiembre 2016, 19:48 pm
Prueba con una ruta relativa (que es lo que deberías hacer la mayoría d elas veces)

En vez de poner "C:/Users/DANIEL/Desktop/Programación/C++/Allegro/Naves/recursos/nave.pcx", (supooniendo que tu ejecutable está en la carpeta Naves, pon: "recursos/nave.pcx". Y a ver.


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: sanxez1 en 25 Septiembre 2016, 19:56 pm
sigue igual



he probado a poner nube.pcx en la ruta y me da el mismo error que si lo pongo bien, he comprobado la ruta original(win+r) y está bien puesta



podríais intentarlo desde vuestros ordenadores por si acaso lo que falla es mi ordenador?



[MOD] No realizar triple post, para añadir comentarios usar el botón "modificar"


Título: Re: el programa dejó de funconar correctamente por un problema.
Publicado por: MAFUS en 25 Octubre 2016, 18:18 pm
¿Tu archivo es un pcx de verdad o has pillado una imagen cualquiera y la has cambiado la extensión?

Si tu imagen era un bmp, y tal vez te iría mejor por esa parte, deberías haber hecho lo siguiente: [del manual online de allegro (deberías pasarte por allí)] http://liballeg.org/stabledocs/en/alleg010.html

Código
  1. PACKFILE *packfile;
  2. BITMAP *bmp;
  3.  
  4. packfile = pack_fopen("mybitmap.bmp", F_READ);
  5. if (!packfile)
  6.    abort_on_error("Couldn't open mybitmap.bmp");
  7.  
  8. bmp = load_bmp_pf(packfile, pal);
  9. if (!bmp)
  10.    abort_on_error("Error loading mybitmap.bmp");