Newsgroup: it.comp.lang.c
Titolo: Problemi con 'atoi': 0 errori nella compil ma esecuzione fallita del programma

Salve a tutti!
                                    Chi mi aiuta a risolvere un
problema?Ogni volta che uso la funzione 'atoi'  win98SE si blocca
nell'esecuzione del programma e mi dice la classica nella finestra di errore
'Questo programma ha eseguito un'operazione non valida e sarà terminato...'.
Più in basso ho copiato il testo di uno dei programmi che non mi funzionao:
l'ho copiato da un libro piuttosto famoso di introduzione all'utilizzo delle
OpenGL.
Il fatto è che mettendo la doppia slash (//) prima di  'n=atoi(etc)' il
programma viene eseguito correttamente, ma ovviamente il risultato finale
non è quello desiderato.
E' possibile che abbia mal configurato VC6.0 o il progetto che utilizzo per
il programma in questione?
(Mi sono infatti limitato a copiare i files glut.h & glut32.lib
rispettivamente nelle dir include e lib di VC6.0. Basta così?)
Pensavo potesse essere un problema dovuto all'assenza del Service Pack: ho
allora installato l'SP4 ma senza risultati...
Qualche consiglio???
Grazie a tutti!
M D
#include <GL/glut.h>
#include <stdlib.h>
#include <windows.h> // anche aggiungendo questa riga nulla di nuovo...
typedef float point3[3];
// initial tetrahedron
point3
v[]={{0.0,0.0,1.0},{0,0.942809,-0.333333},{-0.816497,-0.471405,-0.333333},{0
.816497,-0.471405,-0.333333}};
static GLfloat theta[] = {0,0,0};
int n;
void triangle( point3 a, point3 b, point3 c)
// display a triangle using a line loop for wire frame
// a single normal for constant shading
// or three normals for interpolative shading
{
 glBegin(GL_POLYGON);
  glNormal3fv(a);
  glVertex3fv(a);
  glVertex3fv(b);
  glVertex3fv(c);
 glEnd();
}
void divide_triangle (point3 a, point3 b, point3 c, int m)
{
 //triangle subdivision using vertex numbers
 // righthand rule applied to create outward pointing faces
  point3 v1,v2,v3;
  int j;
  if(m>0)
  {
   for(j=0; j<3; j++) v1[j]=(a[j]+b[j])/2;
   for(j=0; j<3; j++) v2[j]=(a[j]+c[j])/2;
   for(j=0; j<3; j++) v3[j]=(b[j]+c[j])/2;
   divide_triangle(a, v1, v2, m-1);
   divide_triangle(c, v2, v3, m-1);
   divide_triangle(b, v3, v1, m-1);
  }
  else(triangle(a,b,c)); // draw triangle at the end of recursion
}
void tetrahedron (int m)
{
 // Apply triangle subdivision to faces of tetrahedron
 glColor3f(1.0,0,0);
  divide_triangle(v[0],v[1],v[2],m);
 glColor3f(0,1,0);
  divide_triangle(v[3],v[2],v[1],m);
 glColor3f(0,0,1);
  divide_triangle(v[0],v[3],v[1],m);
 glColor3f(0,0,0);
  divide_triangle(v[0],v[2],v[3],m);
}
void display ()
{
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 glLoadIdentity();
 tetrahedron(n);
 glFlush();
}
void myReshape (int w, int h)
{
 glViewport(0,0,w,h);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 if (w<=h)
  glOrtho(-2,2,-2*(GLfloat)h/(GLfloat)w,2*(GLfloat)w/(GLfloat)h,-10,10);
 else
  glOrtho(-2*(GLfloat)w/(GLfloat)h,2*(GLfloat)w/(GLfloat)h,-2,2,-10,10);
 glMatrixMode(GL_MODELVIEW);
 glutPostRedisplay();
}
void
main (int argc, char **argv)
{
 n=atoi(argv[1]);   // <---- questa è la riga incriminata!!!
 glutInit(&argc,argv);
 glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH );
 glutInitWindowSize(500,500);
 glutCreateWindow("3d Gasket recursive method");
 glutReshapeFunc(myReshape);
 glutDisplayFunc(display);
 glEnable(GL_DEPTH_TEST);
 glClearColor(1.0,1.0,1.0,1.0);
 glutMainLoop();
}

  n=atoi(argv[1]);   // <---- questa è la riga incriminata!!!
Hai provato a passargli l'argomento 1?
Se lo lanci senza argomento argv[1] = il nulla.

 Se lo lanci senza argomento argv[1] = il nulla.
Cioè???
Passandogli
                  n=atoi(argv[0])    il programma gira ma non mi dà la
ricorsione voluta
                  n=atoi(argv[2])     o 3 ... stesso errore di sempre...
Ma secondo Voi far girare il programma senza avere impostato PRIMA un NUOVO
progetto specifico va bene lo stesso???
Si accettano ancora consigli...


  n=atoi(argv[1]);   // <---- questa è la riga incriminata!!!
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)

  n=atoi(argv[1]);   // <---- questa è la riga incriminata!!!
Ciao ciao,
Andrea
Ciao M D