c++primer 4th P120 习题4.28 指针的问题

lyh7736362 2010-09-30 02:57:40
#include <iostream>
#include <vector>
using std::cout;
using std::cin;
using std::endl;
using std::vector;
int main()
{
int n;
vector<int> ivec;
cout << "请输入一组int对象,输入完后按ctrl+z然后回车:" <<endl;
while(cin>>n)
{
ivec.push_back(n);
}
int *ip = new int[ivec.size()];
for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter,++ip)
{
*ip = *iter;
cout << *ip <<endl;
}
delete [] ip;
return 0;
}

为什么我的会出现异常?请高人解释一下
原版的答案是用另外一个int指针指向ip,循环中的ip都用它来代替
#include <iostream>
#include <vector>
using std::cout;
using std::cin;
using std::endl;
using std::vector;
int main()
{
int n;
vector<int> ivec;
cout << "请输入一组int对象,输入完后按ctrl+z然后回车:" <<endl;
while(cin>>n)
{
ivec.push_back(n);
}
int *ip = new int[ivec.size()];
int *tp = ip;
for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter,++tp)
{
*tp = *iter;
cout << *tp <<endl;
}
delete [] ip;
return 0;
}
...全文
43 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyh7736362 2010-09-30
  • 打赏
  • 举报
回复
对啊!多谢两位高人!
  • 打赏
  • 举报
回复
for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter,++ip)
{
*ip = *iter;
cout << *ip <<endl;
}
delete [] ip;

经过循环之后,你的Ip已经走到分配空间的最后一个的下一个字节,也就是无效字节

而答案上有一个指针,会指向你分配空间的首地址,那样删除才不会出错
lyh7736362 2010-09-30
  • 打赏
  • 举报
回复
补充一下题目
编写程序由从标准输入设备读入的元素数据建立一个int型vector对象,然后动态创建一个与该vector对象大小一致的数据,把vector对象的所有元素复制到新数组
Csuxiaowu 2010-09-30
  • 打赏
  • 举报
回复
因为你的ip已经改变了
excited_lamb 2010-09-30
  • 打赏
  • 举报
回复
int *ip = new int[ivec.size()]; //1
delete [] ip; //2

1和2的ip已经不一样了

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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