Variable Corrupta

Iniciado por Kaalar, 20 Mayo 2015, 14:28 PM

0 Miembros y 1 Visitante están viendo este tema.

Kaalar

Tengo un problema, que me hace lo que quiero, pero tras hacer la ejecución me marca un error que la variable "mat" esta corrupta, alguien me puede explicar porque. MUCHAS GRACIAS ANTES DE QUE RESPONDAN.


struct vec3{
float x;
float y;
float z;
};

typedef float mat[8];

void InitVec3(vec3 *v, int x,int y){
(*v).x = x;
(*v).y = y;
(*v).z = 0;
}
void InitMat3(mat m, float x0, float x1, float x2, float x3, float x4, float x5, float x6, float x7, float x8){
m[0] = x0; m[1] = x1; m[2] = x2;
m[3] = x3; m[4] = x4; m[5] = x5;
m[6] = x6; m[7] = x7; m[8] = x8;
}
void VaciarMat3(mat m){
m[0] = 0; m[1] = 0; m[2] = 0;
m[3] = 0; m[4] = 0; m[5] = 0;
m[6] = 0; m[7] = 0; m[8] = 0;
}

void SubstractVec3(vec3 v, vec3 u, vec3 *vec){
(*vec).x = v.x - u.x; (*vec).y = v.y - u.y; (*vec).z = 0.0;
}
void AddVec3(vec3 v, vec3 u, vec3 *vec){
(*vec).x = v.x + u.x; (*vec).y = v.y + u.y;
}

int ESAT::main(int, char **){
mat matriz;
vec3 vec;
vec3 vec2;
InitVec3(&vec, 12, 10);
InitVec3(&vec2, 10, 5);
AddVec3(vec, vec2, &vec);
InitMat3(matriz,1,1,1,2,2,2,0,0,0);
VaciarMat3(matriz);
ESAT::WindowInit(800, 600);
while (ESAT::WindowIsOpened() && !ESAT::IsSpecialKeyDown(ESAT::kSpecialKey_Escape)){
ESAT::DrawClear(0, 0, 0);
ESAT::DrawSetStrokeColor(255, 255, 255, 255);
ESAT::WindowFrame();
}
ESAT::WindowDestroy();
return 0;
}





rir3760

En C++ cuando declaras un array indicas su numero de elementos N y después accedes a estos utilizando los indices 0 .. N-1.

En tu caso el error se debe a que tratas de acceder al array como si este consistiera de nueve elementos cuando en realidad solo tiene ocho:
Código (cpp) [Seleccionar]
typedef float mat[8]; // array de 8 elementos, indices validos 0 .. 7

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language