Callejón sin salida.
A ver si alguno tiene idea del por qué
type t_mapa
//datos del mapa
int version;
int filas;
int columnas;
int capas;
int tipo_dato;
int ancho_tile;
int alto_tile;
int desplaz_tile; //para scroll normal, desplazamiento vertical de cada capa
//para scroll isom�trico, altura hacia arriba
string fpg;
word tipo_mapa;
//contenido del mapa
byte pointer b_mapa;
word pointer w_mapa;
<b> int pointer i_mapa; </b>
int fpg_mapa;
//gestion de mapas (por si se almacenan los datos en lista enlazada)
int id;
t_mapa pointer sig;
byte null2;
end
process load_tmf (string tmf_carga, t_mapa pointer tmf_mapa)
private
id_tmf;
cont;
cont2;
byte dato;
word dato2;
int dato3;
string magic;
filas;
columnas;
capas;
tam_dato;
guardado_correcto;
<b> int *puntero_datos;</b>
int tamanio =3800;
begin
[tmf_mapa].tipo_mapa=1;
guardado_correcto=false;
if (file_exists(tmf_carga))
id_tmf=fopen(tmf_carga,o_read);
if (id_tmf==0) return 0; end;
//LECTURA CAMPO MAGIC
cont=0;
for (cont=0;cont<16;cont++)
fread(id_tmf,dato);
magic=magic+chr(dato);
end
if (magic=="TileMapFile "+chr(26)+chr(13)+"\n")
//LECTURA DE LA VERSION
fread(id_tmf,dato3);
[tmf_mapa].version=dato3;
//LECTURA DE FILAS, COLUMNAS Y CAPAS
fread(id_tmf,dato3);
columnas=dato3;
[tmf_mapa].columnas=dato3;
fread(id_tmf,dato3);
filas=dato3;
[tmf_mapa].filas=dato3;
fread(id_tmf,dato3);
capas=dato3;
[tmf_mapa].capas=dato3;
cont2=columnas*filas*capas;
//LECTURA DE TIPO DE DATO
fread(id_tmf,dato3);
tam_dato=dato3;
[tmf_mapa].tipo_dato=dato3;
//LECTURA DE ANIMACIONES (temporalmente disabled)
fread(id_tmf,dato3);
//ZONA DE DATOS
switch (tam_dato)
case 0:
print_debug("CASE O");
[tmf_mapa].b_mapa=alloc(cont2);
print_debug("ALLOC 0");
end
case 1:
print_debug("CASE 1");
[tmf_mapa].w_mapa=alloc(cont2*sizeof(word));
print_debug("ALLOC 1");
end
case 2:
print_debug("CASE 2");
<b> //[tmf_mapa].i_mapa=alloc(cont2*sizeof(int)); </b> <-- esto cuelga la PSP, pero en PC va
<b> puntero_datos=alloc(tamanio*sizeof(int));</b> <-- esto no cuelga la PSP
print_debug("Despues de ALLOC");
<b> (*tmf_mapa).i_mapa=puntero_datos; </b> <-- esto cuelga la PSP, pero en PC va
<b> //tmf_mapa.i_mapa=puntero_datos; </b> <-- esto cuelga la PSP, pero en PC va
<b> //[tmf_mapa].i_mapa=puntero_datos; </b> <-- esto cuelga la PSP, pero en PC va
end
end
print_debug("despues de ALLOC");
cont=1;
for (cont;cont<=cont2;cont++)
switch (tam_dato)
case 0:
fread(id_tmf,dato);
[tmf_mapa].b_mapa[cont-1]=dato;
end
case 1:
fread(id_tmf,dato2);
[tmf_mapa].w_mapa[cont-1]=dato2;
end
case 2:
fread(id_tmf,dato3);
[tmf_mapa].i_mapa[cont-1]=dato3;
end
end
end
print_debug("despues for CONT");
guardado_correcto=true;
end
print_debug("ANTES FCLOSE");
fclose(id_tmf);
end
print_debug("ANTES RETURN");
return (guardado_correcto);
frame;
end
Creía que fallaba la función alloc en psp, pero no es así, parece que falla la asignacion de un puntero con otro.
Me tiene todo escamao, ¿será problema de ámbito?