博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[C++基础]036_一段关于指针的误操作代码
阅读量:6259 次
发布时间:2019-06-22

本文共 628 字,大约阅读时间需要 2 分钟。

芝姐学C++了,下午写了一段C++程序来学习C++语法,下面我们来看她写的代码:

1     int *ptr = new int[4];2     *(ptr++) = 3;3     cout<<*ptr<

首先,这段程序的输出是错误的,而且不能正确的运行成功,可疑的是,编译是完全没有错误的。下面是运行截图:

上面的代码为什么会有错误呢?

我们Debug一下,在第一行打上断点:

1     int *ptr = new int[4];                     ptr:0xcccccccc2     *(ptr++) = 3;                              ptr:0x001f4b283     cout<<*ptr<

可以看到,ptr在最后被delete的时候,地址已经不是最开始分配的了。delete[]是要释放四个int型的内存区域的,但是现在的ptr只有三个int的区域了,所以会报错。具体如下:

原来的ptr:■|■|■|■|■|■|■|■|■

                 

后来的ptr:■|■|■|■|■|■|■|■|■

                     ↑

最后我们得出一个结论:

任何对指针的修改都是有风险的,应该杜绝对指针本身值的修改,否则会在delete的时候遇到意想不到的错误。

转载于:https://www.cnblogs.com/alephsoul-alephsoul/archive/2012/10/24/2736441.html

你可能感兴趣的文章
使用RSA加密在Python中逆向shell
查看>>
MS UI Automation
查看>>
Android开发指南(41) —— Searchable Configuration
查看>>
现代软件工程 怎么教好课 (读书笔记)
查看>>
磁盘fat32转NTFS
查看>>
关于和技术人员交流的一二三
查看>>
Ubuntu10下MySQL搭建Amoeba系列(文章索引)
查看>>
产生sdp文件供DSS使用
查看>>
《洛克菲勒留给儿子的38封信》 第五封:要有竞争的决心
查看>>
STL vector vs list function comparison:
查看>>
应用服务器和web server 的区别
查看>>
Libevent笔记
查看>>
mycelipse之安装SVN1.6.5(转载)
查看>>
怎样把数据汇到Excel中的心得经验
查看>>
状态键盘完美适应iOS中的键盘高度变化
查看>>
Linux下oracle11g 导入导出操作详细
查看>>
每日英语:When Computer Games May Keep The Brain Nimble
查看>>
Android AsyncTask运作原理和源码分析
查看>>
demos.jquerymobile
查看>>
【Android】解决Android横竖屏切换数据丢失问题的方法
查看>>