Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
异常导致字符串中的垃圾数据(C#)_C#_Exception - Fatal编程技术网

异常导致字符串中的垃圾数据(C#)

异常导致字符串中的垃圾数据(C#),c#,exception,C#,Exception,好吧,这是个奇怪的问题。垃圾数据也不是随机的,它似乎是可执行文件本身的子字符串 private void Form1_Load(object sender, EventArgs e) { string s = GetValue(); // at this point, s == "400". Why isn't really relevant (dumbed down a test) if (s != "18446744073709551615") th

好吧,这是个奇怪的问题。垃圾数据也不是随机的,它似乎是可执行文件本身的子字符串

private void Form1_Load(object sender, EventArgs e)
{
    string s = GetValue();
    // at this point, s == "400". Why isn't really relevant (dumbed down a test)
    if (s != "18446744073709551615") 
        throw new Exception();
        // When the exception is thrown though, the string is set to random
        // data from inside the executable.
}
这似乎取决于GetValue()中某些看似无关紧要的实现细节,例如对string.Format()的调用位于不同的位置


有没有人遇到过类似的情况,或者知道是什么原因导致了这种情况?

如果在抛出异常后检查变量,并且该变量现在已超出范围,那么它应该指向内存中的垃圾。您是否尝试在引发异常之前和之后检查此变量的值?

“我正在VS中的“Locals”窗口中检查它”


这就解释了。与流行的观点相反,C#被允许做一些优化。如果不在函数末尾添加“KeepAlive”,则实际上不必存储该值。

我认为无论多长时间,都应该包含GetValue()的定义。另一个大问题是如何在“s”中检查数据,更重要的是,何时检查该数据?你是在抛出异常并且“s”现在超出范围后检查它的吗?是的,这是在VS弹出后,它是未处理的异常内容。我不记得以前发生过局部变量的这种情况。我在VSI的“局部变量”窗口中检查它。似乎是这样的。。。但为什么它似乎只发生在一根弦上?如果我有一个具有相同作用域的整数,我可以在“局部变量”窗口中很好地看到它的值。与Ryan的问题相同:为什么在函数开头声明的整数不会像字符串一样随异常一起消失?你如何知道它是否消失?它在不同位置占用的空间更少,因此被踩到的可能性也更小。嗯,由于这是C#,int是值类型,字符串是引用类型。