Problem

What is the problem with this function. SDL crusges when o use it:

void findcolor()
{
Slock(back);
Uint32 cur;
Uint8 r1,b1,g1;
int x,e,i;
for(e=0;e<shag;e++)
{
for(i=0;i<height; i++)
{
for(x=0;x<kolvo; x++)
{
cur=getpixel(back,abs((x)+e),-(abs(sin(x/20))*-i)+960/2);
SDL_GetRGB(cur,fmt,r,g,b);
color[e][i][x][1]=(*r);
color[e][i][x][2]=(*g);
color[e][i][x][3]=(*b);
}
}
}
Sulock(back);
color2[0][0][0][1]=250;
color2[0][0][0][2]=236;
color2[0][0][0][3]=40;
for(e=0; e<shag; e++)
{
for(x=0; x<kolvo; x++)
{
for(i=0; i<50; i++)
{
r1=Smooth(250,232,i,50);
g1=Smooth(239,109,i,50);
b1=Smooth(40,26,i,50);
color2[e][i][x][1]=r1;
color2[e][i][x][2]=g1;
color2[e][i][x][3]=b1;
}
}
}
for(e=0; e<shag; e++)
{
for(x=0;x<kolvo; x++)
{
color2[e][51][x][1]=232;
color2[e][51][x][2]=109;
color2[e][51][x][3]=26;
}
}
for(e=0; e<shag; e++)
{
for(i=0; i<shag; i++)
{
for(x=0; x<kolvo; x++)
{
r1=Smooth(232,color[e][i+52][x][1],i,68);
g1=Smooth(109,color[e][i+52][x][2],i,68);
b1=Smooth(26,color[e][i+52][x][3],i,68);
color2[e][i+52][x][1]=r1;
color2[e][i+52][x][2]=g1;
color2[e][i+52][x][3]=b1;
}
}
}
for(e=0;e<shag;e++)
{
for(i=66;i<69;i++)
{
for(x=0;x<kolvo;x++)
{
color2[e][i+52][x][1]=Smooth(0,color[e][i+52][x][1],i,68);
color2[e][i+52][x][2]=Smooth(0,color[e][i+52][x][2],i,68);
color2[e][i+52][x][3]=Smooth(0,color[e][i+52][x][3],i,68);
}
}
}
}

Where Smooth is:> Uint8 Smooth(Uint8 x,Uint8 y,Uint8 now, Uint8 total)

{
return(abs(x+(y-x)*now/total));
}

[something]

  for(x=0;x<kolvo; x++)
  {
   cur=getpixel(back,abs((x)+e),-(abs(sin(x/20))*-i)+960/2);
   SDL_GetRGB(cur,fmt,r,g,b);
   color[e][i][x][1]=(*r);
   color[e][i][x][2]=(*g);
   color[e][i][x][3]=(*b);
  }

[something]

How is color initialised? Aren’t you getting out of bounds?
Where exactly program hangs?
K.

Krata wrote:

[something]

 for(x=0;x<kolvo; x++)
 {
  cur=getpixel(back,abs((x)+e),-(abs(sin(x/20))*-i)+960/2);
  SDL_GetRGB(cur,fmt,r,g,b);
  color[e][i][x][1]=(*r);
  color[e][i][x][2]=(*g);
  color[e][i][x][3]=(*b);
 }

[something]

How is color initialised? Aren’t you getting out of bounds?
Where exactly program hangs?
K.

Here how color is initialised:

Uint8 color[shag][kolvo][height][3];
Uint8 color2[shag][kolvo][height][3];

Actually i do not know wher exactly it crashes! But when i add findcolor
in to my main, program crashes!

Actually i do not know wher exactly it crashes! But when i add
findcolor
in to my main, program crashes!

Looks like you need to brush up on your debugging skills. You
already found out that adding the findcolor function crashes your
program. Great! Now figure out where in findcolor it crashes. Run
the program in a debugger, set a breakpoint, and single-step through
the function. If you don’t have a debugger, put a few printf’s here
and there and try to narrow the problem down that way. Once you know
where exactly the crash occurs, it is usually fairly simply to
figure out why your program crashes. And with that knowledge,
coming up with a fix is probably really simple, in this case. Or, on
a bad day, you may be forced to rethink your whole algorithm ;-)–
Matthijs Hollemans
All Your Software
www.allyoursoftware.com

Matthijs Hollemans wrote:

Actually i do not know wher exactly it crashes! But when i add

findcolor

in to my main, program crashes!

Looks like you need to brush up on your debugging skills. You
already found out that adding the findcolor function crashes your
program. Great! Now figure out where in findcolor it crashes. Run
the program in a debugger, set a breakpoint, and single-step through
the function. If you don’t have a debugger, put a few printf’s here
and there and try to narrow the problem down that way. Once you know
where exactly the crash occurs, it is usually fairly simply to
figure out why your program crashes. And with that knowledge,
coming up with a fix is probably really simple, in this case. Or, on
a bad day, you may be forced to rethink your whole algorithm :wink:

The algoritm is fine! I used it my old DOS program,whish was writteh on
TP7.0 then on TMT3.x.
So OK? i figured out where it crashes it os right over here:
SDL_GetRGB(cur,fmt,r,g,b);
So,
Uint32 cur, is ok!
r,g,b are uint8? thats soposed to be ok too.
SDL_PixelFormat *fmt. so it is ok too. Like i probably know what is
problem fmt, do not have any value, because i just eckared it,
and did not do anything! I hav to read docs :stuck_out_tongue: