C# StackOverflowException

王林
Lepaskan: 2024-09-03 15:21:20
asal
836 orang telah melayarinya

Artikel berikut menyediakan garis besar untuk C# StackOverflowException. StackOverflowException dilemparkan oleh arahan Microsoft Intermediate Language (MSIL) yang dipanggil OpCodes.LocalLoc arahan. Kelas StackOverflowException menyediakan beberapa kaedah, termasuk StackOverflowException(), StackOverflowException(mesej rentetan), StackOverflowException(mesej rentetan, pengecualian innerexception), dan sebagainya.

Sintaks :

[Serializable]
public sealed class StackOverflowException : SystemException
Salin selepas log masuk

Bekerja

  • Atur cara menghadapi StackOverflowException apabila terdapat situasi di mana berbilang kaedah dipanggil secara bersarang, mengakibatkan rekursi tidak terkawal yang menjana tindanan tanpa had dalam ingatan. Ini akhirnya membawa kepada penamatan program tanpa memaparkan mesej ralat.
  • Ia berlaku apabila program kehabisan ruang tindanan yang tersedia disebabkan oleh kaedah panggilan yang berlebihan dan tidak dapat memperuntukkan memori tindanan tambahan.
  • Terdapat beberapa kaedah kelas StackOverflowException seperti StackOverflowException(), StackOverflowException(mesej rentetan), StackOverflowException(mesej rentetan, pengecualian innerexception), dsb.

Contoh C# StackOverflowException

Di bawah adalah contoh yang dinyatakan :

Contoh #1

Program C# untuk menunjukkan Pengecualian Limpahan Tindanan apabila terdapat rekursi tak terhingga berlaku pada masa larian.

Kod:

using System;
//a class called program is defined
public class program
{
// a method called rec is defined which takes a value as parameter and increases its value by one
static void Rec(int vals)
{
// since we have written a recursive loop and 0 is passed as a parameter, it ends in an infinite loop causing exception
Console.WriteLine(vals);
Rec(++vals);
}
//main method is called
public static void Main()
{
//The rec method is called to start the infinite recursion
Rec(0);
}
}
Salin selepas log masuk

Output:

C# StackOverflowException

Contoh #2

Program C# untuk menunjukkan StackOverflowException apabila terdapat rekursi tak terhingga berlaku pada masa larian walaupun selepas menggunakan blok cuba dan tangkap blok kod untuk menangkap pengecualian.

Kod:

using System;
//a class called check is defined
public class check
{
// a method called ex is defined which takes a value as parameter and increases its value by one
static void ex(int equals)
{
Console.WriteLine(equals);
ex(++equals);
}
//main method is called within which try and block methods are defined to catch the exception
public static void Main()
{
try
{
//The ex method is called by passing zero as a parameter to start the infinite recursion
ex(0);
}
catch (StackOverflowException ep)
{
Console.WriteLine(ep.Message);
}
}
}
Salin selepas log masuk

Output:

C# StackOverflowException

Gelung tak terhingga untuk rekursi bermula dengan menghantar sifar sebagai parameter kepada kaedah ex dalam blok cuba. Walaupun kami telah menulis blok tangkapan untuk menangkap pengecualian, ia gagal menangkap pengecualian ini kerana pengecualian ini melangkaui blok tangkapan untuk ditangkap.

Langkah-Langkah untuk Mengelakkan StackOverflowException dalam C#

  • Limpahan tindanan berlaku apabila tindanan dalam memori penuh, dan masalah ini boleh diatasi dengan menetapkan kedalaman tindanan dan penyahpepijat boleh memberikan maklumat ini.
  • Sekarang kita mempunyai peluang untuk menetapkan nilai kedalaman tindanan, kita perlu menetapkannya kepada nilai sekecil mungkin dan memerhatikan output. Jika output tidak melimpah, kita boleh menukarnya kepada nilai yang lebih besar, dan sekiranya limpahan tindanan berlaku, kita akan dapat menyahkod nilai yang sesuai untuk ditetapkan untuk kedalaman tindanan. Oleh itu untuk mencipta pengecualian yang boleh menangkap StackOverflowException, mengetahui kedalaman tindanan dengan bantuan penyahpepijat adalah satu kemestian.
  • Kod yang menyebabkan rekursi ialah punca StackOverflowException.

Atas ialah kandungan terperinci C# StackOverflowException. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!