访问new创建的数组为什么总是出现错误,不太理解,int *new_p = p;这一行不就是地址的复制吗?没必要写感觉是一样的啊?为什么在for循环内能够输出正确的值,换到循环外用for循环就访问的值是错误的?
第一次 int *new_p = p;复制的值,和 *new_p = *iter;语句运行之后的地址会有不同,这是为什么?不是用 * 将new_p解引用然后同样的道理讲iter对应的值放入new_p的地址内吗?
求各位解答一二,初学指针。
#include<iostream>
//编写程序由从标准输入设备读取的元素数据建立一个int型的vector对象,
//然后创建一个与该vector对象大小一致的数组,把vector对象的虽有元素赋值给新数组
#include<vector>
using namespace std;
int main(){
vector<int> container;
int value;//数组需要一开始就确定长度,哪怕元素都为零
string result;
cout << "ctrl +z 放于行首代表输入完成(终止)" << endl;
while(cin >> value){
//输入的值放入缓冲区,一次读取一个数据,第二次循环直接读取第一次输入尚未放入容器的值
container.push_back(value);
}
int *p = new int[container.size()];//动态建立一个数组,*p指向数组首个元素
int *new_p = p;
int i = 0;
cout << "container容量为:" << container.size() << endl;
for (vector<int>::iterator iter=container.begin(); iter != container.end(); ++iter,++new_p) {
if (i < container.size())
{
*new_p = *iter;
i++;
cout << *new_p<< endl;
}
//cout << p << endl;
}
for (int j = 0; j < container.size(); j++) {
cout << new_p[j] <<" ";
}
cout << endl;
delete [] p;
system("pause");
return 0;
}
将32行改放到36行下。
不然那块内存都已经释放掉了,你去访问不就无意义了么。
34行是不对的,new_p在21行的for循环中一直在向后移动,最终指向了p数组的尾部了。所以34行应该输出p[j]
看看你的指针是不是没有初始化或者越界
1300