J'ai débogué mon other problem au constructeur MyMesh
. Dans ce code:bad_alloc exception lors de la tentative d'impression des valeurs
if (hollow) {
numTriangles = n*8;
triangles=new MyTriangle[numTriangles];
if (smooth) numSurfacePoints=n*8;
else numSurfacePoints=n*12;
surfacePoints=new SurfacePoint[numSurfacePoints];
}else {
numTriangles = n*4;
triangles=new MyTriangle[numTriangles];
if (smooth){
numSurfacePoints=n*4;
surfacePoints=new SurfacePoint[numSurfacePoints];
surfacePoints[n*4]=SurfacePoint(vector3(0,0,1),vector3(0,0,1));
surfacePoints[n*4+1]=SurfacePoint(vector3(0,0,-1),vector3(0,0,-1));
}else{
numSurfacePoints=n*6;
surfacePoints=new SurfacePoint[numSurfacePoints];
surfacePoints[n*6]=SurfacePoint(vector3(0,0,1),vector3(0,0,1));
surfacePoints[n*6+1]=SurfacePoint(vector3(0,0,-1),vector3(0,0,-1));
}
}
Je détermine les points de surface et les triangles nécessaires pour le maillage. Les bols "creux" et "lisse" indiquent, si j'ai besoin d'un trou dans le cône, ou si les normales sont les mêmes, mais je pense que c'est irréfléchi.
Le problème est le suivant: si creux == faux, il fait quelque chose de mal, mais ne se bloque, il permet même de mettre les valeurs dans les tableaux, mais quand je suis en train de comme ça cout:
for(int i=0;i<numSurfacePoints;i++){
std::cout<<"vertex "<<i<<"-> pos:"<<surfacePoints[i].pos.x<<" "<<
surfacePoints[i].pos.y<<" "<<surfacePoints[i].pos.z<<
" norm:"<<surfacePoints[i].norm.x<<" "<<surfacePoints[i].norm.y<<
" "<<surfacePoints[i].norm.z<<"\n";
}
il déclenche une exception bad_alloc, juste quand i = 0.
En outre, il y avait un temps, quand le segment de code supérieur a jeté un bad_alloc à l'opérateur nouveau, mais ce problème vient de se résoudre, mais c'est peut-être pertinent.
Quelqu'un peut-il m'aider?
pouvez-vous écrire ce que vous faites si creuse == faux? – Ashish