Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Kaalar en 20 Mayo 2015, 14:28 pm



Título: Variable Corrupta
Publicado por: Kaalar en 20 Mayo 2015, 14:28 pm
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.

Código:
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;
}





Título: Re: Variable Corrupta
Publicado por: rir3760 en 1 Junio 2015, 17:59 pm
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
  1. typedef float mat[8]; // array de 8 elementos, indices validos 0 .. 7

Un saludo