摘要:
C指针不慎操作具很强的危险性,使用C++之后,习惯将指针改为使用引用,曾经一度以为引用可以避开C指针的危险性。结果,今天调试程序时,意外发现,指针和引用只是在代码文本中的表示形式不同而已,实际的使用几乎完全一样。虽然无法查看到内存中引用值的具体情况,但是在引用所代表的那个对象被释放之后,引用依然可以访问其成员或者是内存中的地址。1 int* iPtr = new(10);2 int& ref = *iPtr;3 delete iPtr;4 5 // debug下程序依然可以运行6 ref = 5;这小段代码,虽然不起眼,但是对于程序来说,是很大的隐患。 阅读全文
摘要:
今天很惯常的,在测试数据时遇到了bug。所有的数据20GB在服务器上运行,进行相应的运行测试,为保证速度,代码用的是release版本。但是中途遇到了意想不到的问题,根据控制台的输出来看,可能是一个模块出现了bug,导致程序进入了死循环。但是又不忍心关掉程序,毕竟20GB的数据量,运行起来是很要时间的,关掉意味着重新来过。后来,老大过来帮助调试,幸好预留了*.ilk文件,直接打开vs,将用:工具==>附加到进程,选择相应的进程即可进行调试。虽然信息有限,release版本额~但总比没有好。当然,这是有条件在先的,需要一些预留的信息,具体是什么目前还不清楚。 阅读全文
摘要:
今天很意外的发现,在Visual Studio环境下,程序的debug版本运行良好,但是release版本竟然挂了,调试了半天什么都没发现,而且同一份代码在别人的机器上debug和release版本都运行良好,这更加让我无法理解了。但是无意中,程序系统封装好了的基础库因为bug进行了更新,更新时发现release版本的基础库竟然是用的是debug版本的基础库,更新后release版的程序就好了。 阅读全文