Page 1 sur 1
invalid acess memory[Résolu]
Publié : lun. 09/avr./2007 15:07
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
Publié : lun. 09/avr./2007 15:43
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...

Publié : lun. 09/avr./2007 15:54
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

Publié : lun. 09/avr./2007 15:59
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
Publié : lun. 09/avr./2007 16:02
par tmyke
La oui, cela plante, j'étudie le truc...
Publié : lun. 09/avr./2007 16:02
par Dr. Dri
j'ai l'IMA je vais regarder ça de près
Dri
Publié : lun. 09/avr./2007 16:04
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...
Publié : lun. 09/avr./2007 16:05
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
Publié : lun. 09/avr./2007 16:06
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
Publié : lun. 09/avr./2007 16:08
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é

Publié : lun. 09/avr./2007 16:10
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
Publié : lun. 09/avr./2007 16:12
par Anonyme
Merci, y a des jour ou je ferais mieux de faire dodo
