我试图在这里找到错误,调试器在以下位置停止:
Pthread_create renderer passed
Renderer loop (re)started
Process 84779 stopped
* thread #4: tid = 0x3603, 0x0000000101546c4b libjess.so`render_deformation + 667 at renderer.c:472, stop reason = EXC_BAD_ACCESS (code=1, address=0x36f0000)
frame #0: 0x0000000101546c4b libjess.so`render_deformation + 667 at renderer.c:472
469 for (i = 0; i < resy*resx; i++)
470 {
471 aux = (unsigned char *) ((*(tab1) << 2 ) + (unsigned int) buffer);
-> 472 *pix = *(aux) ;
473 pix++;
474 *pix = *(aux + 1);
475 pix++;
我怀疑它与指针转换有关。谁能告诉我最好的施法方式。
该功能的完整代码(根据要求):
void render_deformation(int defmode)
{
unsigned int bmax, *tab1, *tab2, *tab3, *tab4, i;
unsigned char *pix = pixel , *buf = buffer, *aux;
SDL_LockSurface(screen);
/**************** BUFFER DEFORMATION ****************/
if (video == 8)
{
buf = buffer;
tab1 = table1;
tab2 = table2;
tab3 = table3;
tab4 = table4;
bmax = resx * resy + (unsigned int) pixel;
switch(defmode)
{
case 0:
memcpy(pixel,buffer,resx * resy);
break;
case 1:
for (pix = pixel; pix < (unsigned char *) bmax ; pix++)
*pix = *(buffer + *(tab1++)) ;
break;
case 2:
for (pix = pixel; pix < (unsigned char *) bmax; pix++)
*pix = *(buffer + *(tab2++)) ;
break;
case 3:
for (pix = pixel; pix < (unsigned char *) bmax; pix++)
*pix = *(buffer + *(tab3++)) ;
break;
case 4:
for (pix = pixel; pix < (unsigned char *) bmax; pix++)
*pix = *(buffer + *(tab4++)) ;
break;
default:
printf("Problem with blur_mode\n");
}
}
else
{
pix = pixel;
bmax = resx * resy;
switch(defmode)
{
case 0:
memcpy(pixel, buffer, pitch * resy);
goto nodef;
break;
case 1:
tab1 = table1;
break;
case 2:
tab1 = table2;
break;
case 3:
tab1 = table3;
break;
case 4:
tab1 = table4;
break;
default:
printf("Problem with blur_mode\n");
}
for (i = 0; i < resy*resx; i++)
{
aux = (unsigned char *) ((*(tab1) << 2 ) + (unsigned int) buffer);
*pix = *(aux) ;
pix++;
*pix = *(aux + 1);
pix++;
*pix = *(aux + 2);
pix+=2;
tab1++;
}
nodef:;
}
SDL_UnlockSurface(screen);
}