Discussion Board
编译通过运行出错,请高手指教!
2004-08-05, 02:47
#1
Registered User
运行是出现以下信息!不懂什么意思,简直要晕死!
Method............: 1238acc 'MainMenu.keyPressed (virtual)'
Stack Chunk.......: 11c0e30
Frame Pointer.....: 11c0f84
Current IP........: 12387ab = 1238790 + offset 27
Previous Frame....: 11c0f60
Previous IP.......: 10151cb6 (offset 19)
Frame size........: 3 (2 arguments, 1 local variables)
Argument[0].......: 12371fc
Argument[1].......: fffffffb
Local[2]..........: 11c0f60
Operand[1]........: 12371fc
Method............: 100ec80c 'javax/microedition/lcdui/Canvas.callKeyPressed (virtual)'
Stack Chunk.......: 11c0e30
Frame Pointer.....: 11c0f60
Current IP........: 10151cb6 = 10151ca3 + offset 19
Previous Frame....: 11c0f34
Previous IP.......: 1012c4ce (offset 202)
Frame size........: 5 (2 arguments, 3 local variables)
Argument[0].......: 12371fc
Argument[1].......: fffffffb
Local[2]..........: 11c1b00
Local[3]..........: 11c0f48
Local[4]..........: 100e771c
Method............: 100d5a04 'javax/microedition/lcdui/Display$DisplayAccessor.keyEvent (virtual)'
Stack Chunk.......: 11c0e30
Frame Pointer.....: 11c0f34
Current IP........: 1012c4ce = 1012c404 + offset 202
Previous Frame....: 11c0f00
Previous IP.......: 1014cd8b (offset 11)
Frame size........: 7 (3 arguments, 4 local variables)
Argument[0].......: 11c2e80
Argument[1].......: 1
Argument[2].......: fffffffb
Local[3]..........: 12371fc
Local[4]..........: 0
Local[5]..........: 11c1b0c
Local[6]..........: 0
Method............: 100e9050 'javax/microedition/lcdui/Display$DisplayManagerImpl.keyEvent (virtual)'
Stack Chunk.......: 11c0e30
Frame Pointer.....: 11c0f00
Current IP........: 1014cd8b = 1014cd80 + offset 11
Previous Frame....: 11c0edc
Previous IP.......: 1014e5a5 (offset 124)
Frame size........: 3 (3 arguments, 0 local variables)
Argument[0].......: 11c15ec
Argument[1].......: 1
Argument[2].......: fffffffb
Method............: 100ea44c 'com/sun/midp/lcdui/DefaultEventHandler.keyEvent (virtual)'
Stack Chunk.......: 11c0e30
Frame Pointer.....: 11c0edc
Current IP........: 1014e5a5 = 1014e529 + offset 124
Previous Frame....: 11c0ea4
Previous IP.......: 101351c7 (offset 210)
Frame size........: 8 (4 arguments, 4 local variables)
Argument[0].......: 11c1184
Argument[1].......: 1
Argument[2].......: 0
Argument[3].......: fffffffb
Local[4]..........: 11c1178
Local[5]..........: 0
Local[6]..........: 11c0e30
Local[7]..........: 0
Method............: 100daf58 'com/sun/midp/lcdui/AutomatedEventHandler.keyEvent (virtual)'
Stack Chunk.......: 11c0e30
Frame Pointer.....: 11c0ea4
Current IP........: 101351c7 = 101350f5 + offset 210
Previous Frame....: 11c0e74
Previous IP.......: 1014dde2 (offset 178)
Frame size........: 6 (4 arguments, 2 local variables)
Argument[0].......: 11c1184
Argument[1].......: 1
Argument[2].......: 0
Argument[3].......: fffffffb
Local[4]..........: 11c0e74
Local[5]..........: 1014ddd9
Method............: 100e9e14 'com/sun/midp/lcdui/DefaultEventHandler$QueuedEventHandler.run (virtual)'
Stack Chunk.......: 11c0e30
Frame Pointer.....: 11c0e74
Current IP........: 1014dde2 = 1014dd30 + offset 178
Previous Frame....: 0
Previous IP.......: 1
Frame size........: 15 (1 arguments, 14 local variables)
Argument[0].......: 11c1168
Local[1]..........: ffffffff
Local[2]..........: ffffffff
Local[3]..........: ffffffff
Local[4]..........: ffffffff
Local[5]..........: 1
Local[6]..........: 0
Local[7]..........: 0
Local[8]..........: 0
Local[9]..........: 0
Local[10]..........: 0
Local[11]..........: 0
Local[12]..........: 0
Local[13]..........: 11c1118
Local[14]..........: 0
VM status:
Instruction pointer.: 12387ab (offset within invoking method: 27)
Next instruction....: 0xbb
Frame pointer.......: 11c0f84
Local pointer.......: 11c0f78
Stack size..........: 256; sp: 11c0f9c; ranges: 11c0e38-11c1038;1232f04-1233104;
Contents of the current stack frame:
11c0f78: 12371fc (lp)
11c0f7c: fffffffb
11c0f80: 11c0f60
11c0f84: 11c0f60 (fp)
11c0f88: 10151cb6
11c0f8c: 11c0f74
11c0f90: 1238acc
11c0f94: 11c0e30
11c0f98: 0 (end of frame)
11c0f9c: 12371fc (sp)
Execution stack contains 360 items:
11c1168
ffffffff
ffffffff
ffffffff
ffffffff
1
0
0
0
0
0
0
0
11c1118
0
0
1
1229f00
100e9e14
11c0e30
0
11c1184
1
0
fffffffb
11c0e74
1014ddd9
11c0e74
1014dde2
11c0e88
100daf58
11c0e30
0
11c1184
1
0
fffffffb
11c1178
0
11c0e30
0
11c0ea4
101351c7
11c0eb8
100ea44c
11c0e30
0
11c15ec
1
fffffffb
11c0edc
1014e5a5
11c0ef0
100e9050
11c0e30
0
11c2e80
1
fffffffb
12371fc
0
11c1b0c
0
11c0f00
1014cd8b
11c0f14
100d5a04
11c0e30
0
12371fc
fffffffb
11c1b00
11c0f48
100e771c
11c0f34
1012c4ce
11c0f48
100ec80c
11c0e30
0
12371fc
fffffffb
11c0f60
11c0f60
10151cb6
11c0f74
1238acc
11c0e30
0
12371fc
Execution completed.
Super Contributor
说一下错误的详细信息,包括触发条件等,如果知道错误的大概地方贴出些代码更好,这些调试时候的状态信息看不出是什么错误。
Regards
Maxying
首先感谢楼上的回答!
2004-08-05, 07:20
#3
Registered User
Registered User
定义了一个public class lkmap类!
然后在public class maincanvas类中创建了个对象
private lkmap map;
map=new lkmap();
就这两句去掉就不会出现错误!
Super Contributor
你跟踪一下,这个类的构造函数有错吗?继续执行,看看是哪里出的错,你这个类是读取地图?还有什么其他的处理?比如响应按键?
Regards
Maxying
Registered User
只是读取地图!地图是个数组好象是读取时指针的错误!WTK运行出问题!
lkmap类如下
2004-08-08, 01:47
#7
Registered User
public class lkmap{
public static final int ZLC=8000;
private int gs=1; //关数1,2,3,4,5
public int lk[][]=new int[9][4]; //路况
public lkmap(){
gs=1;
lk[0][0]=1; //车号
lk[1][0]=2;
lk[2][0]=3;
lk[3][0]=4;
lk[4][0]=0;
lk[5][0]=5;
lk[6][0]=6;
lk[7][0]=7;
lk[8][0]=8;
lk[0][1]=1; //车道
lk[1][1]=2;
lk[2][1]=3;
lk[3][1]=1;
lk[4][1]=2;
lk[5][1]=3;
lk[6][1]=1;
lk[7][1]=2;
lk[8][1]=3;
lk[0][2]=180; //坐标
lk[1][2]=150;
lk[2][2]=120;
lk[3][2]=60;
lk[4][2]=0;
lk[5][2]=-60;
lk[6][2]=-120;
lk[7][2]=-180;
lk[8][2]=-240;
switch(gs){ //根据关数设置各车的初始速度
case 1:
lk[0][3]=2;
lk[1][3]=1;
lk[2][3]=1;
lk[3][3]=1;
lk[4][3]=0;
lk[5][3]=1;
lk[6][3]=1;
lk[7][3]=1;
lk[8][3]=2;
break;
case 2:
lk[0][3]=3;
lk[1][3]=2;
lk[2][3]=1;
lk[3][3]=2;
lk[4][3]=0;
lk[5][3]=2;
lk[6][3]=1;
lk[7][3]=2;
lk[8][3]=3;
break;
case 3:
lk[0][3]=4;
lk[1][3]=3;
lk[2][3]=2;
lk[3][3]=1;
lk[4][3]=0;
lk[5][3]=2;
lk[6][3]=2;
lk[7][3]=3;
lk[8][3]=4;
break;
case 4:
lk[0][3]=3;
lk[1][3]=2;
lk[2][3]=3;
lk[3][3]=3;
lk[4][3]=0;
lk[5][3]=4;
lk[6][3]=2;
lk[7][3]=4;
lk[8][3]=5;
break;
case 5:
lk[0][3]=5;
lk[1][3]=4;
lk[2][3]=5;
lk[3][3]=4;
lk[4][3]=0;
lk[5][3]=5;
lk[6][3]=4;
lk[7][3]=5;
lk[8][3]=4;
break;
default:
lk[0][3]=2;
lk[1][3]=1;
lk[2][3]=1;
lk[3][3]=1;
lk[4][3]=0;
lk[5][3]=1;
lk[6][3]=1;
lk[7][3]=1;
lk[8][3]=2;
break;
}
}
public int getcdbyche(int cheid){
int x=0;
int flag=0;
for(x=0;x<9;x++){
if(lk[x][0]==cheid){
// break;
flag=lk[x][1];
}
}
return flag;
}
public int getzbbyche(int cheid){
int x=0;
int flag=0;
for(x=0;x<9;x++){
if(lk[x][0]==cheid){
//break;
flag=lk[x][2];
}
}
return flag;
}
public int getmcbyche(int cheid){
int x=0;
int flag=0;
for(x=0;x<9;x++){
if(lk[x][0]==cheid){
//break;
flag=x+1;
}
}
return flag;
}
public void setcdbyche(int cheid,int cd){
for(int x=0;x<9;x++){
if(lk[x][0]==cheid){
lk[x][1]=cd;
//break;
}
}
}
public void setzbbyche(int cheid,int zb){
for(int x=0;x<9;x++){
if(lk[x][0]==cheid){
lk[x][2]=zb;
//break;
}
}
}
public int getzbbymc(int mc){
return lk[mc][2];
}
public int getcheidbymc(int mc){
return lk[mc][0];
}
public int getcdbymc(int mc){
return lk[mc][1];
}
public int getsdbymc(int mc){
return lk[mc][3];
}
public void setzbbymc(int mc,int zb){
lk[mc][2]=zb;
}
public void setcheidbymc(int mc,int cheid){
lk[mc][0]=cheid;
}
public void setcdbymc(int mc,int cd){
lk[mc][1]=cd;
}
public void setsdbymc(int mc,int sd){
lk[mc][3]=sd;
}
}
在运行后还会出现以下信息!
2004-08-08, 02:12
#8
Registered User
Execution completed.
452428 bytecodes executed
23 thread switches
494 classes in the system (including system classes)
3154 dynamic objects allocated (109024 bytes)
ALERT: Invalid heap pointer found
5 garbage collections (72212 bytes collected)
Execution completed.
452428 bytecodes executed
23 thread switches
494 classes in the system (including system classes)
3154 dynamic objects allocated (109024 bytes)
5 garbage collections (72212 bytes collected)
Super Contributor
不知道这个mc是什么?会不会在某种情况下mc大于8呢?如果大于8恐怕就会ALERT: Invalid heap pointer found,请仔细检查程序的其它部分。
r60600
Super Contributor
你程序中这个函数:
public int getmcbyche(int cheid){
int x=0;
int flag=0;
for(x=0;x<9;x++){
if(lk[x][0]==cheid){
//break;
flag=x+1;
}
}
return flag;
}
当cheid在x=8的时候满足,这样flag就是9了,这样后面的操作会出现数组越界,你仔细看看你的程序,flag = x+1;没做任何边界处理。
Regards
Maxying
Posting Permissions
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
Forum Rules