(14)“值传递一定不会改变参数” 理论而言,值传递的确不会改变参数的内容。但是,某年某月的某一天,隔壁office的硕士mm写了这么一段程序,参数的值却被改变了: int n = 9; 大概整个office的人都被搞懵了,都说编译器瞎搞,有问题。找到笔者,笔者凭借以往的经常,一眼就看出来不是什么编译器出错,而是在函数example内对字符串a的访问越界! 当在函数example内对a的访问越界后,再进行写操作时,就有可能操作到了n所在的内存空间,于是改变了n的值。 给出这个语录,并非为了推翻“值传递不会改变参数”的结论,而是为了从侧面证明在C/C++语言中,数组越界是多么危险的错误! 下面的两个函数有明显的数组越界: void example1() 而这个函数的越界就不这么明显: void example3() 其实,这个函数危险到了极点。因为对于strcpy函数而言,拷贝的时候要碰到’\0’才结束,str1并没有被赋予结束符,因而你根本就不知道strcpy( string, str1 )的结果究竟会是拷贝多大一片内存! 遗憾的是,C/C++永远不会在编译和连接阶段提示数组越界,它只会在运行阶段导致程序的崩溃。 数组越界,是大多数C/C++编程新手常犯的错误,而它又具有极大的隐蔽性,新手们一定要特别注意。 |
正在阅读:C/C++编程新手错误语录(续二)C/C++编程新手错误语录(续二)
2005-09-16 10:08
出处:PConline
责任编辑:moningfeng
键盘也能翻页,试试“← →”键
相关文章
visual c++ 6.0怎么编译运行?visual c++ 6.0编译运行教程
visual c++ 6.0怎么用?visual c++ 6.0使用方法
vs2015中文旗舰版编写c++程序的操作教程
vc++6.0(Visual C++)的使用操作步骤
visual c++ 6.0怎么显示行号
visual c++ 2008运行库怎么装在c盘 visual c++ 2008运行库装在c盘的方法
microsoft visual c++ 2008怎么安装 microsoft visual c++ 2008安装方法
Visual Studio 2010编写C++程序的具体步骤
vc++6.0Visual C++进行安装的操作过程讲解
Notepad++配置C++环境的操作步骤