I have a crash (forced close) in the android emulator. I traced the error to the code extract below, but I dont know how to rectify it. I'm more used to C++ , so it might be something that java doesnt allow. But I have no ideas now why it crashes.
cLines = new objLines[c_vertices.length/3];
.
.
.
for(int i=0; i< (c_vertices.length); i=i+3){
Log.e("i = ", Float.toString( i ) );
rMaths.fToPoint3D( cLines, c_vertices, i );
}
...
calls this function...
public void fToPoint3D( objLines[] L, float[] f, int i ){
// Log.e("x = ", Float.toString(f[i+0]) );
L[i/3].pLineStart.x = f[i+0];
L[i/3].pLineStart.y = f[i+1];
L[i/3].pLineStart.z = f[i+2];
}
the above code crashes. BUT if I comment this lines below it runs well
// L[i/3].pLineStart.x = f[i+0];
// L[i/3].pLineStart.y = f[i+1];
// L[i/3].pLineStart.z = f[i+2];
But I cant figure out why it crashes at this code in the first place. Any clues? **All arrays are within bounds**
android java code problem
Started by run_g, Apr 24 2012 10:14 AM
5 replies to this topic
Ad:
#2 Members - Reputation: 534
Posted 24 April 2012 - 11:53 AM
In java arrays themselves are objects. So you newed an object Array[size], but the objects inside need to be newed. Just think of everything as a pointer and java makes sense.
cLines[i] = new ObjLines();
So your first line:
cLines = new objLines[c_vertices.length/3];
Just makes an Array *object*. It did not make any objLines Objects.
cLines[i] = new ObjLines();
So your first line:
cLines = new objLines[c_vertices.length/3];
Just makes an Array *object*. It did not make any objLines Objects.
#3 Members - Reputation: 107
Posted 24 April 2012 - 12:29 PM
You need to (after the cLines = new objLines[c_verticies.length/3];) :
// Actually creates the objLines objects for the array
for (int i=0;i<c_vertices.length; i+=3) {
cLines[i] = new objLines();
}
Though you SHOULD make all your Classes start with an Uppercase letter - like ObjLines - and a bit more descriptive
// Actually creates the objLines objects for the array
for (int i=0;i<c_vertices.length; i+=3) {
cLines[i] = new objLines();
}
Though you SHOULD make all your Classes start with an Uppercase letter - like ObjLines - and a bit more descriptive
#4 Members - Reputation: 142
Posted 25 April 2012 - 06:47 AM
Many Many thanks for the hints, I finally got it working following what you suggested
initially when I added
cLines[i] = new objLines();
...it still crashed but thats because there wasn't a 1 to 1 between L[i/3] and cLines[i] and the gaps caused it to crash, so I added L[i/3] = new objLines() as below
public void fToPoint3D( objLines[] L, float[] f, int i ){
// Log.e("x = ", Float.toString(f[i+0]) );
L[i/3] = new objLines(); //modification
L[i/3].pLineStart.x = f[i+0];
L[i/3].pLineStart.y = f[i+1];
L[i/3].pLineStart.z = f[i+2];
}
in addition to stop the crash I finally had to include these in the objLines class constructor:
public objLines() {
pLineStart = new point3D(); //modification
pLineEnd = new point3D(); // modification
}
and finally runs well!
overall with these extra inconveniences I think java is a pain in the neck. In a large software development it distracts from proper algorithm coding, no wonder most programmers dislike java.
initially when I added
cLines[i] = new objLines();
...it still crashed but thats because there wasn't a 1 to 1 between L[i/3] and cLines[i] and the gaps caused it to crash, so I added L[i/3] = new objLines() as below
public void fToPoint3D( objLines[] L, float[] f, int i ){
// Log.e("x = ", Float.toString(f[i+0]) );
L[i/3] = new objLines(); //modification
L[i/3].pLineStart.x = f[i+0];
L[i/3].pLineStart.y = f[i+1];
L[i/3].pLineStart.z = f[i+2];
}
in addition to stop the crash I finally had to include these in the objLines class constructor:
public objLines() {
pLineStart = new point3D(); //modification
pLineEnd = new point3D(); // modification
}
and finally runs well!
overall with these extra inconveniences I think java is a pain in the neck. In a large software development it distracts from proper algorithm coding, no wonder most programmers dislike java.
#6 Members - Reputation: 127
Posted 30 April 2012 - 06:24 PM
It's my experience that Java code on Android will tend to crash about 1000 times more often than the same amount of native code.
This can probably be attributed to the many noob developers looking to develop their own app without ever properly learning the language as well as the paltform inherently being unstable due to crappy decisions by Google engineers working under time pressure.
This can probably be attributed to the many noob developers looking to develop their own app without ever properly learning the language as well as the paltform inherently being unstable due to crappy decisions by Google engineers working under time pressure.






