两组数组之间复制容易出错地方
来源:互联网 发布:ubuntu可以安装在u盘 编辑:程序博客网 时间:2024/05/17 00:15
目的是将,将数组arr1的数据复制到动态申请的空间里,并显示出来。
错语代码:
void main()
{
int arr1[5]={1,2,3,4,5};
int *pa=arr1;
int *p=new int[5];
for(int i=0;i<5;i++)
*p++=*pa++;
for(int i=0;i<5;i++)
cout<<*p++<<' ';
cout<<endl;
for(int i=0;i<5;i++)
cout<<*pa++<<' ';
delete []p;
_getch(); //输入任意键,返回系统
return 0;
}
运行结果: 显示出来的数据很大,不是原来数组arr1元素,而且运行时程序发生中止出错。
分析原因:
原来是在
for(int i=0;i<5;i++)
*p++=*pa++;
运行后,指针p与指针pa所指向的地址都发生了改变,而不是指向数组arr1的首地址了。
同时因为运行
for(int i=0;i<5;i++)
cout<<*p++<<' ';
后 超出p所指向的空间,所以发生中止。
正确修改如下:
void main()
{
int arr1[5]={1,2,3,4,5};
int *pa=arr1;
size_t sz=sizeof(arr1)/sizeof(*arr1);
int *p=new int[sz];
for(int i=0;i<5;i++)
*p++=*pa++;
for(int i=0;i<5;i++)
cout<<*(p-5+i)<<' ';//指向开始地址
cout<<endl;
pa=arr1;//重新指向数组arr1
for(int i=0;i<5;i++)
cout<<*pa++<<' ';
p-=5;//返回初值指针,不然运行delete []p;时中止
delete []p;
_getch(); //输入任意键,返回系统
return 0;
}
数组复制时,细节值得注意!
- 两组数组之间复制容易出错地方
- tslib容易出错地方
- 数组循环时新手容易出错的地方
- MFC 容易出错地方笔录
- delete容易出错的地方
- php容易出错的地方
- C++ 容易出错的地方
- UINavigationController容易出错的地方
- 编程容易出错地方汇总( 边界编程)
- AS3几个容易出错的地方
- C、C++容易出错的几个地方
- C/C++中容易出错的地方
- shell脚本容易出错的地方
- 一些容易出错的小地方
- Java向前引用容易出错的地方
- java的一些容易出错的地方!
- C语言容易出错的地方
- Java向前引用容易出错的地方
- 区分Activity的四种加载模式
- UVA 11151 Longest Palindrome(最长回文子序列 + dp + LCS)
- physx转换矩阵终于正确了,哈哈,就是TMD太累
- 制作生产yaffs映像文件的工具
- BNU 25589 ls【字符的分离与匹配——有待完善Orz】
- 两组数组之间复制容易出错地方
- xml--通过dom4j解析XML
- Deepin Linux 12.06编译boost regex库
- DICCX-5101单片机试验箱
- 证据表明:亚马逊在IaaS依然领先
- Struts2 学习笔记——struts.xml文件之Bean的配置
- ubuntu下用rename批量修改文件名
- Qt版本-塔防游戏实现一
- 【boost::smatr_ptr】scoped_ptr