C++动态数组的问题
编写程序读入一组 string 类型的数据,并将它们存储在vector 中。接着,把该 vector 对象复制给一个字符指针数组。为 vector 中的每个元素创建一个新的字符数组,并把该 vector 元素的数据复制到相应的字符数组中,最后把指向该数组的指针插入字符指针数组。 输出建立的 vector 对象和数组的内容。输出数组后,记得释放字符数组。
也就是C++ primert 4th的习题4.35.
int main()
{
string s;
vector<string> vec;
cout << "输入几个字符串" << endl;
while ( cin >> s )
{
vec.push_back( s );
}
char **p = new char *[ vec.size() ];
vector<string>::iterator iter = vec.begin();
for ( ; iter != vec.end(); ++iter, ++p )
{
char *cp = new char [ (*iter).size() + 1 ];
strcpy( cp, (*iter).c_str() );
*p = cp;
}
p -= vec.size();//使指针p指向第一组数
for ( size_t i = 0; i != vec.size(); ++i, ++p )
{
cout << *p << " ";
delete [] *p;
}
delete [] p;
cout << endl;
return 0;
}
我要问的是,程序编译后有一个警告怎么处理,
2:运行程序后,会出现一个这样的方框,不知道是哪里错了,各位高手帮个忙,谢谢。
[解决办法]
p -= vec.size();//使指针p指向第一组数
for ( size_t i = 0; i != vec.size(); ++i, ++p )
{
cout << *p << " ";
delete [] *p;
*p = NULL;
}
//++p导致p指向的是个无效地址,所以delete是异常
p -= vec.size();//使指针p指向有效首地址
delete [] p;
cout << endl;
[解决办法]
int main(){ string s; vector<string> vec; cout << "输入几个字符串" << endl; while ( cin >> s ) { vec.push_back( s ); } char **p = new char *[ vec.size() ]; char** pPont = p; vector<string>::iterator iter = vec.begin(); for ( ; iter != vec.end(); ++iter, ++pPont ) { char *cp = new char [ (*iter).size() + 1 ]; strcpy( cp, (*iter).c_str() ); *pPont = cp; } // p -= vec.size();//使指针p指向第一组数 pPont = p; for ( size_t i = 0; i != vec.size(); ++i, ++pPont ) { cout << *pPont << " "; delete [] *pPont; } delete [] p; cout << endl; return 0;}