Avatar billede glenn007 Nybegynder
11. marts 2009 - 15:43 Der er 2 kommentarer

stacked overflow problem med kode stump

Hejsa,

nogle der kan komme med et bud på hvorfor jeg ret ofte for stacked overflow exeption i denne kode.

jeg mener ikke den er i en uendelig løkke


  public static void Capture(Point SourcePoint, Point DestinationPoint, Rectangle SelectionRectangle, string FilePath)
        {
            bool tryAgain = false;
            int trymore = 0;
do
  {
  try
    {
using (Bitmap thisbitmap = new Bitmap(SelectionRectangle.Width, SelectionRectangle.Height))
{

  using (Graphics g = Graphics.FromImage(thisbitmap))
  {
  g.CopyFromScreen(SourcePoint, DestinationPoint, SelectionRectangle.Size);
    }

  string savePath = "C://temp/temp/123turn.bmp";
                   
                 
                 
  try
      {
  using (FileStream dstream = new FileStream(savePath, FileMode.Create))
{
  thisbitmap.Save(dstream, ImageFormat.Bmp);
    dstream.Close();
  }
  tryAgain = false;
    trymore = 0;
  }
catch
  {
  trymore = trymore + 1;
  if (trymore <= 1)

                             
  tryAgain = true;
else
  tryAgain = false;
                        }
                   
                }

            }

            catch
            {
            }
                    }
while (tryAgain);

        }
Avatar billede arne_v Ekspert
11. marts 2009 - 17:05 #1
Koden er meget svaer at laese p.g.a. formateringen.

Men en stack overflow plejer at skyldes en uendelig rekursion ikke en uendelig loekke.
Avatar billede aaberg Nybegynder
11. marts 2009 - 23:17 #2
Du har 2 try-catch inde i hinanden. Den yderste er en try-catch som ignorerer fejl. Man kan generelt sige, at den type try-catch ALDRIG (jeg mener virkeligt ALDRIG) skal bruges.

Altså, følgende er fy fy:

try
{
  //Kode her.
}
catch
{
}

Hvis denne try-catch fanger en fejl, vil den blive ignoreret, og din while-løkke vil tage en iteration mere. Når fejlen da opstår igen (og bliver ignoreret, fy fy), tager while-løkken en iteration mere osv osv osv. Stack overflow.

Fjern denne try-catch.

En anden ting. Hvorfor bruge en while løkke?

Som jeg læser koden, vil du forsøge at skrive billedet ned i en fil 2 gange, hvis første forsøg fejler. Hvorfor ikke bruge en for-løkke som har 2 iterationer. Hvis det lykkedes at gemme filen i første forsøg, kalder du "break", som vil bryde ud af løkken. En meget mere elegant løsning, hvor du med garanti aldrig vil få stack overflow fejl.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester