Saludos a todos.
Bueno en esta ocacion queria pedirles un favor HAGANME LA TAREA!
No mentiras, realmente es solo un favor .
Resumen:Algo falla al asignar memoria con malloc despues de 964 veces dentro de un ciclo, pero no me arroja error sino al ejecutar el programa.
Explicacion completa:Estoy desarrollando un programa en el cual necesito crear una matriz dinamicamente, ya he implementado la funcion para hacerlo , pero por alguna extraña razon cuando llega a cierto punto dentro del ciclo se me revienta el programa...
char **getDotMatrix(bitmapType *bmp)
{
char **matrix;
char *msg;
int x=0, y=0,i=0,j=0, bytesPerCol = bmp->bitsPerPixel/8;
msg=(char*)malloc(255);
memset(msg,'\0',255);
matrix = (char **)malloc(bmp->width*bytesPerCol);
if(matrix != NULL)
{
// memset(matrix, '\0', sizeof(matrix));
for(x=0;x < (bmp->width*bytesPerCol);x++)
{
matrix[x] = (char *)malloc(bmp->height);
if(matrix[x]!=NULL)
{
//memset(matrix[x], '\0', bmp->height);
if((x+1)%964==0)
x=x;
}
else
{
strcpy(msg,"Error al asignar memoria a la matrix[x]: ");
allegro_message(msg);
}
}
/*for(y=0;y<bmp->height;y++)
{
for(x=0;x<bmp->width*bytesPerCol;x++)
{
for(j=2;j>=0;j++)
{
matrix[x][y] = bmp->bmpData[i+j];
x++;
}
x--;
i+=bytesPerCol;
}
}*/
}
else
{
strcpy(msg,"Error al asignar memoria a la matrix: ");
allegro_message(msg);
}
return matrix;
}
He controlado todo lo que parece estar a mi alcance, al utilizar malloc no me devuelve NULL o sea que se supone que ha funcionado bien pero en este segmento:
for(x=0;x < (bmp->width*bytesPerCol);x++)
{
matrix[x] = (char *)malloc(bmp->height);
if(matrix[x]!=NULL)
{
//memset(matrix[x], '\0', bmp->height);
if((x+1)%964==0)
x=x;
}
else
{
strcpy(msg,"Error al asignar memoria a la matrix[x]: ");
allegro_message(msg);
}
}
como se puede obervar hasta al llegar x=964 todo funciona bien pero en la siguiente asignacion de memoria:
matrix
- = (char *)malloc(bmp->height);
Me sale este mensaje en el compilador:
Excepción no controlada en 0x77f65a58 en Bitmap.exe: Punto de interrupción del usuario.
Estos son lo valores de las variables al momento anterior al error, no estan los de el contenido de los apuntadores porque no caben, sin embargo:
bmp->with = 640
bmp->heigth= 480
bmp->bitsPerPixel =24
bytesPerCol 3 int
i 0 int
x 963 int
y 0 int
Les agradezco de antemano cualquier ayuda que me puedan prestar
ya que llevo dos dias con esto y no he logrado resolverlo
Con valores pequeños todo funciona normal.