im learning C# and i try to build a "DataSafe".
I got a StackOverflowExeption and i dont find a Solution for my Problem. Is there a way that Visual Studio Shows me the Exeption in Detail?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Datensafe
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Geben Sie eine beliebige Zeichenkette ein: ");
String input = Console.ReadLine();
Safe safe = new Safe(input);
Console.WriteLine(safe.Treasure);
Console.ReadKey();
}
}
class Safe
{
private string treasure;
public Safe(String value)
{
Treasure = value;
}
public String Treasure
{
set { treasure = encrypt(value); }
get { return decrypt(treasure); }
}
private string encrypt(string str)
{
byte[] bytes = System.Text.Encoding.Unicode.GetBytes(str);
return Convert.ToBase64String(bytes);
}
private string decrypt(String encrypted)
{
byte[] bytes = Convert.FromBase64String(Treasure);
return System.Text.Encoding.Unicode.GetString(bytes);
}
}
}
Could someone help me?
Here is the ErrorLog:
Process is terminated due to StackOverflowExeption
"Datensafe.vshost.exe" (CLR v4.0.30319: Datensafe.vshost.exe): "C:\windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
"Datensafe.vshost.exe" (CLR v4.0.30319: Datensafe.vshost.exe): "C:\windows\assembly\GAC_MSIL\Microsoft.VisualStudio.HostingProcess.Utilities\12.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.HostingProcess.Utilities.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
"Datensafe.vshost.exe" (CLR v4.0.30319: Datensafe.vshost.exe): "C:\windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
"Datensafe.vshost.exe" (CLR v4.0.30319: Datensafe.vshost.exe): "C:\windows\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
"Datensafe.vshost.exe" (CLR v4.0.30319: Datensafe.vshost.exe): "C:\windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
"Datensafe.vshost.exe" (CLR v4.0.30319: Datensafe.vshost.exe): "C:\windows\assembly\GAC_MSIL\Microsoft.VisualStudio.HostingProcess.Utilities.Sync\12.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.HostingProcess.Utilities.Sync.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
"Datensafe.vshost.exe" (CLR v4.0.30319: Datensafe.vshost.exe): "C:\windows\assembly\GAC_MSIL\Microsoft.VisualStudio.Debugger.Runtime\12.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Debugger.Runtime.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
"Datensafe.vshost.exe" (CLR v4.0.30319: Datensafe.vshost.exe): "U:\Visual Studio 2013\Projects\Datensafe\Datensafe\bin\Debug\Datensafe.vshost.exe" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
"Datensafe.vshost.exe" (CLR v4.0.30319: Datensafe.vshost.exe): "C:\windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
"Datensafe.vshost.exe" (CLR v4.0.30319: Datensafe.vshost.exe): "C:\windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml.Linq\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.Linq.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
"Datensafe.vshost.exe" (CLR v4.0.30319: Datensafe.vshost.exe): "C:\windows\Microsoft.Net\assembly\GAC_MSIL\System.Data.DataSetExtensions\v4.0_4.0.0.0__b77a5c561934e089\System.Data.DataSetExtensions.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
"Datensafe.vshost.exe" (CLR v4.0.30319: Datensafe.vshost.exe): "C:\windows\Microsoft.Net\assembly\GAC_MSIL\Microsoft.CSharp\v4.0_4.0.0.0__b03f5f7f11d50a3a\Microsoft.CSharp.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
"Datensafe.vshost.exe" (CLR v4.0.30319: Datensafe.vshost.exe): "C:\windows\Microsoft.Net\assembly\GAC_32\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
"Datensafe.vshost.exe" (CLR v4.0.30319: Datensafe.vshost.exe): "C:\windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
"Datensafe.vshost.exe" (CLR v4.0.30319: Datensafe.vshost.exe): "C:\windows\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources\v4.0_4.0.0.0_de_b77a5c561934e089\mscorlib.resources.dll" geladen. Das Modul wurde ohne Symbole erstellt.
Der Thread 0x580 hat mit Code 259 (0x103) geendet.
Der Thread 0x2f4 hat mit Code 259 (0x103) geendet.
Der Thread 0xabc hat mit Code 0 (0x0) geendet.
Der Thread 0xa48 hat mit Code 259 (0x103) geendet.
"Datensafe.vshost.exe" (CLR v4.0.30319: Datensafe.vshost.exe): "U:\Visual Studio 2013\Projects\Datensafe\Datensafe\bin\Debug\Datensafe.exe" geladen. Symbole wurden geladen.
Das Programm "[864] Datensafe.vshost.exe" wurde mit Code -2147023895 (0x800703e9) beendet.
You are using Treasure
property:
private string decrypt(String encrypted)
{
byte[] bytes = Convert.FromBase64String(Treasure); // here
return System.Text.Encoding.Unicode.GetString(bytes);
}
Thus you have infinite recursive call when you reading Treasure
property value of your Safe
class
Console.WriteLine(safe.Treasure);
Here you read property value, which tries to decrypt.. property value, which tries to decrypt.. property value etc
Just use encrypted
param which you are passing to method:
private string decrypt(String encrypted)
{
byte[] bytes = Convert.FromBase64String(encrypted);
return System.Text.Encoding.Unicode.GetString(bytes);
}
You should pass in the encrypted
method variable to the FromBase64String
call:
byte[] bytes = Convert.FromBase64String(encrypted);
Now you are calling decrypt
from the Treasure
setter, and inside you use Treasure
again.
How you could have analyzed it yourself?
To resolve a StackOverflowException
, check the call stack. There must be repetition in the methods called. Take something in the middle from the call stack and see what is called over and over again. Check if the recursion is intended. If not, try to see where the repetition originates from (in this case the call to Treasure
from your decrypt
method).
byte[] bytes = Convert.FromBase64String(Treasure);
in the getter is wrong. You call decrypt in the getter and then you call the getter in decrypt.
Change this line, this is causing recursion in accessing Treasure
byte[] bytes = Convert.FromBase64String(Treasure);
it should be
byte[] bytes = Convert.FromBase64String(encrypted);
User contributions licensed under CC BY-SA 3.0