invalid acess memory[Résolu]

Archive.
Anonyme

invalid acess memory[Résolu]

Message par Anonyme »

Salut, je ne comprend pas pourquoi lors du second appel de cette procedure
j'ai un "invalid acess memory"

Est ce un bogue ??

Code : Tout sélectionner


Structure MESH3D
  Position.VECTOR3       
  Rotation.Quaternions  
  
  VerticeList.l
  Nbr_Vertice.l
  
  Mat_Translate.MATRIX4x4
  Mat_Rotation.MATRIX4x4
  Mat_Projection.MATRIX4x4
  ScaleFactor.f
EndStructure


Procedure CREATE_MESH(Vertice)
  
  *Temp.MESH3D      = AllocateMemory(SizeOf(MESH3D))
  *Temp\VerticeList   = AllocateMemory(Vertice*12)
  *Temp\Nbr_Vertice = Vertice
  *Temp\ScaleFactor = 1
  
  ProcedureReturn *Temp
EndProcedure
Dernière modification par Anonyme le lun. 09/avr./2007 16:08, modifié 1 fois.
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Bizarre, jai essayé le code suivant (comme le tiens, mais avec des versions
DX des composant mathématique 3D):

Code : Tout sélectionner

Structure MESH3D
  Position.D3DXVECTOR3   
  Rotation.D3DXQUATERNION
 
  VerticeList.l
  Nbr_Vertice.l
 
  Mat_Translate.D3DXMATRIX
  Mat_Rotation.D3DXMATRIX
  Mat_Projection.D3DXMATRIX
  ScaleFactor.f
EndStructure


Procedure CREATE_MESH(Vertice)
 
  *Temp.MESH3D      = AllocateMemory(SizeOf(MESH3D))
  *Temp\VerticeList   = AllocateMemory(Vertice*12)
  *Temp\Nbr_Vertice = Vertice
  *Temp\ScaleFactor = 1
 
  ProcedureReturn *Temp
EndProcedure


Debug "debut"
For i = 0 To 200
 *tt.MESH3D = CREATE_MESH(128*(i+1))
 Debug *tt\VerticeList
 Debug *tt\Nbr_Vertice
Next
Debug "fin"
Je n'ai jamais de plantage.
J'ai remplacé ensuite plutot
...VerticeList.l.. dans la structure par *VerticeList, vue que AllocateMemory()
attend renvoie un pointeur. Juste une histoire de syntaxe. Mais j'ai
tenté plusieurs manipulation, sans VAM... :cry:
Force et sagesse...
Anonyme

Message par Anonyme »

Bizarre, chez moi ca plante lors du second appel à CreateMesh()

entre les 2 createmesh(), j''ai cette fct° :
Procedure SET_VERTEX(*Mesh.MESH3D,Vertex,x.f,y.f,z.f)
PokeF(*Mesh\VerticeList+((Vertex*#Vertice_SizeOf)+0),x)
PokeF(*Mesh\VerticeList+((Vertex*#Vertice_SizeOf)+4),y)
PokeF(*Mesh\VerticeList+((Vertex*#Vertice_SizeOf)+8),z)
EndProcedure
Quand je la vire , ca passe, sinon , sa plante :?
Anonyme

Message par Anonyme »

Voila le bug isolé :

Code : Tout sélectionner

Structure Quaternions
  x.f
  y.f
  z.f
  w.f
EndStructure

Structure MATRIX4x4
  _11.f : _21.f : _31.f : _41.f
  _12.f : _22.f : _32.f : _42.f 
  _13.f : _23.f : _33.f : _43.f 
  _14.f : _24.f : _34.f : _44.f 
EndStructure 

Structure VECTOR3
  x.f
  y.f
  z.f
EndStructure

Structure MESH3D
  Position.VECTOR3       ; Position in 3D space
  Rotation.Quaternions   ; use quaternion for rotations
  
  *VerticeList.l
  Nbr_Vertice.l
  
  Mat_Translate.MATRIX4x4
  Mat_Rotation.MATRIX4x4
  Mat_Projection.MATRIX4x4
  ScaleFactor.f
  
  
EndStructure

#Vertice_SizeOf = 12



Procedure CREATE_MESH(Vertice)
  
  *Temp.MESH3D = AllocateMemory(SizeOf(MESH3D))
  *Temp\VerticeList = AllocateMemory(Vertice*#Vertice_SizeOf)
  *Temp\Nbr_Vertice = Vertice
  *Temp\ScaleFactor = 1
  
  
  ProcedureReturn *Temp
EndProcedure



Procedure SET_VERTEX(*Mesh.MESH3D,Vertex,x.f,y.f,z.f)
  
  *Ptr.l = *Mesh\VerticeList
  PokeF( *Ptr+((Vertex*#Vertice_SizeOf)+0),x)
  PokeF( *Ptr+((Vertex*#Vertice_SizeOf)+4),y)
  PokeF( *Ptr+((Vertex*#Vertice_SizeOf)+8),z)
  
  
EndProcedure  



*A = CREATE_MESH(10)

For i = 1 To 10
SET_VERTEX(*A,i,0,0,0)
Next 

*b = CREATE_MESH(10)

For i = 1 To 10
  SET_VERTEX(*b,i,0,0,0)
Next 
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

La oui, cela plante, j'étudie le truc...
Force et sagesse...
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

j'ai l'IMA je vais regarder ça de près

Dri
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

j'écrirais plutot

Code : Tout sélectionner


*A = CREATE_MESH(10)

For i = 1 To 10
SET_VERTEX(*A,i-1,0,0,0)
Next

*b = CREATE_MESH(10)

For i = 1 To 10
  SET_VERTEX(*b,i-1,0,0,0)
Next
la c'est bon...
Dernière modification par tmyke le lun. 09/avr./2007 16:06, modifié 1 fois.
Force et sagesse...
Anonyme

Message par Anonyme »

dans se sens ca passe, mais ca ne m'arange pas :s

Code : Tout sélectionner

*A = CREATE_MESH(10)
*b = CREATE_MESH(10)

For i = 1 To 10
SET_VERTEX(*A,i,0,0,0)
Next 

For i = 1 To 10
  SET_VERTEX(*b,i,0,0,0)
Next 

edit : Tmyke, je regarde
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

(j'ai merdé sur mon post d'avant, désolé, mais j'ai corrigé)

ou plutot..

Code : Tout sélectionner

*A = CREATE_MESH(10)

For i = 0 To 9
 SET_VERTEX(*A,i,0,0,0)
Next



*b = CREATE_MESH(10)

For i = 0 To 9
  SET_VERTEX(*b,i,0,0,0)
Next
Force et sagesse...
Anonyme

Message par Anonyme »

J'ai trouvé, mauvaise allocation de mémoire pour les vertices, j'ai oublié de multiplier le nombre de vertice par la taille d'un float :?

Merci d'avoir regardé :wink:
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

bah je poste quand même ma solution, si ca t'intéresse comme méthode ce sera ça de gagné ^^

Code : Tout sélectionner

Structure Quaternions
  x.f
  y.f
  z.f
  w.f
EndStructure

Structure MATRIX4x4
  _11.f : _21.f : _31.f : _41.f
  _12.f : _22.f : _32.f : _42.f
  _13.f : _23.f : _33.f : _43.f
  _14.f : _24.f : _34.f : _44.f
EndStructure

Structure VECTOR3
  x.f
  y.f
  z.f
EndStructure

Structure MESH3D
  Position.VECTOR3       ; Position in 3D space
  Rotation.Quaternions   ; use quaternion for rotations
  
  Mat_Translate.MATRIX4x4
  Mat_Rotation.MATRIX4x4
  Mat_Projection.MATRIX4x4
  ScaleFactor.f
  
  Nbr_Vertice.l
  VerticeList.VECTOR3[0]
EndStructure

Procedure CREATE_MESH(Nbr_Vertice)
  
  ;faut vérifier que nbr_vertice est positif
  
  *Temp.MESH3D = AllocateMemory(SizeOf(MESH3D) + SizeOf(VECTOR3) * Nbr_Vertice)
  *Temp\Nbr_Vertice = Nbr_Vertice
  *Temp\ScaleFactor = 1.0
  
  ProcedureReturn *Temp
EndProcedure

Procedure SET_VERTEX(*Mesh.MESH3D,Vertex,x.f,y.f,z.f)
  
  ;faut vérifier que vertex est positif et inférieur a nbr_vertice
  
  *Mesh\VerticeList[Vextex]\x = x
  *Mesh\VerticeList[Vextex]\x = y
  *Mesh\VerticeList[Vextex]\x = z
  
EndProcedure 

*A = CREATE_MESH(10)

For i = 1 To 10
SET_VERTEX(*A,i,0,0,0)
Next

*b = CREATE_MESH(10)

For i = 1 To 10
  SET_VERTEX(*b,i,0,0,0)
Next 
Dri
Anonyme

Message par Anonyme »

Merci, y a des jour ou je ferais mieux de faire dodo :D
Répondre