这个问题没搞清楚,希望知情人指点(描述见内容)

lulianqi 2015-06-04 01:53:54

class cc
{
public string str = "";
public int i = 8;
public int getI()
{
return i;
}
}

struct myTestStruct
{
public List<string> strs;
public cc sc;
public void addstr(string yorStr)
{
if (strs == null)
{
strs = new List<string>();
}
strs.Add(yorStr);
}
}

myTestStruct myTest3()
{
myTestStruct testStuct = new myTestStruct();
testStuct.addstr("strstr");
return testStuct;
}





睡不着觉啊

为了重现问题 提取简化了 以上代码,方便定位。
只要调用myTest3() 就会出现“由于线程停在某个无法进行垃圾回收的点”
测试现象上看testStuct.addstr("strstr"); 是直接原因 【其他对问题复现没有关系的代码全部去掉了】
而且如果把myTestStruct改成引用类型,或者把myTestStruct里的引用类型sc去掉(sc是一个为了重现随意定义的class),问题就消失了

难道myTest3 里 testStuct出栈的时候 vs认为strs已经销毁了

问题查了很久才知道什么地方,虽然可以通过一些手段绕过去,不过感觉没搞清楚问题原因实在无法入眠。 希望能得到大家的指点
...全文
186 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lulianqi 2015-06-04
  • 打赏
  • 举报
回复
引用 6 楼 starfd 的回复:
单步F11一步步执行下来我也试过了,没这个问题啊……
受您启发。换电脑换环境又尝试了几次 电脑1(64位win8) 电脑2(32位win8) 电脑1+.net3.5 有问题 电脑1+.net4.0 ok 电脑2+.net3.5 ok 电脑2+.net4.0 ok 这样现象看起来,代码本身有问题的可能性比较小了,应该是计算机环境不同导致的。
  • 打赏
  • 举报
回复
单步F11一步步执行下来我也试过了,没这个问题啊……
lulianqi 2015-06-04
  • 打赏
  • 举报
回复
引用 2 楼 starfd 的回复:
没你说的这种问题
十分感谢 是我没有说清楚,直接运行 函数结束的时候取值 是没有问题的,只有在单步调试的时后 到return处 vs的监视器就显示“由于线程停在某个无法进行垃圾回收的点”
lulianqi 2015-06-04
  • 打赏
  • 举报
回复
引用 3 楼 lulianqi 的回复:
[quote=引用 1 楼 xuzuning 的回复:] vs2010 经测试,没有发现你说的问题
十分感谢 是我没有说清楚,直接运行 函数结束的时候取值 是没有问题的,只有在单步调试的时后 到return处 vs的监视器就显示“由于线程停在某个无法进行垃圾回收的点”[/quote] 十分感谢 是我没有说清楚,直接运行 函数结束的时候取值 是没有问题的,只有在单步调试的时后 到return处 vs的监视器就显示“由于线程停在某个无法进行垃圾回收的点”
lulianqi 2015-06-04
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
vs2010 经测试,没有发现你说的问题
十分感谢 是我没有说清楚,直接运行 函数结束的时候取值 是没有问题的,只有在单步调试的时后 到return处 vs的监视器就显示“由于线程停在某个无法进行垃圾回收的点”
  • 打赏
  • 举报
回复
没你说的这种问题
xuzuning 2015-06-04
  • 打赏
  • 举报
回复
vs2010 经测试,没有发现你说的问题

110,556

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧