主题:c++ 的delete 语句问题及数组奇怪现象
题目要求:读入一组string类型的数据(例如读入几个单词),将他们存在vector中,创建一个指针数组1,再为vector里每个对象创建一个字符数组2,把vector元素的数据复制到字符数组中,每个字符数组2的为头指针为指针数组1的元素。利用指针数组1输出vector的内容。
问题:1:关于第一个问题,我稍微了解过野指针的现象,但是这里我并没有在一次循环内给q重新赋值,但是为什么仍能输出,没有提示出错?
2:按道理说,这里已经把每个对象对应的指针q的地址送到指针p那里了,但为什么输出的对象却没有变化?
希望能得到答案,非常感谢!
一下是代码:
#include <iostream>
#include <string>
#include <vector>
using std::cout;
using std::endl;
using std::cin;
using std::string;
using std::vector;
int main()
{
vector<string> ivec;
string a;
while (cin>>a)
{
ivec.push_back(a);
}
string *p[ivec.size()];
int m=0;
for (vector<string>::iterator iter=ivec.begin();iter!=ivec.end();++iter,++m)
{
string *q=new string [30];
*q=*iter;
p[m]=q;
delete [] q;
cout<<*p[m]<<" "; //问题1:为什么这里的*p[m]改为*q后仍能输出?
}
cout<<endl;
// 输出部分
for (int i=0;i!=ivec.size();++i)
{
cout<<*p[i]<<" ";//问题2:这里的p[i]照理应该输出vector的对象,为什么这里都是输出最后的对象而没有变化?
}
cout<<endl;
system("Pause");
return 0;
问题:1:关于第一个问题,我稍微了解过野指针的现象,但是这里我并没有在一次循环内给q重新赋值,但是为什么仍能输出,没有提示出错?
2:按道理说,这里已经把每个对象对应的指针q的地址送到指针p那里了,但为什么输出的对象却没有变化?
希望能得到答案,非常感谢!
一下是代码:
#include <iostream>
#include <string>
#include <vector>
using std::cout;
using std::endl;
using std::cin;
using std::string;
using std::vector;
int main()
{
vector<string> ivec;
string a;
while (cin>>a)
{
ivec.push_back(a);
}
string *p[ivec.size()];
int m=0;
for (vector<string>::iterator iter=ivec.begin();iter!=ivec.end();++iter,++m)
{
string *q=new string [30];
*q=*iter;
p[m]=q;
delete [] q;
cout<<*p[m]<<" "; //问题1:为什么这里的*p[m]改为*q后仍能输出?
}
cout<<endl;
// 输出部分
for (int i=0;i!=ivec.size();++i)
{
cout<<*p[i]<<" ";//问题2:这里的p[i]照理应该输出vector的对象,为什么这里都是输出最后的对象而没有变化?
}
cout<<endl;
system("Pause");
return 0;