首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++动态数组的有关问题

2012-09-03 
C++动态数组的问题编写程序读入一组 string 类型的数据,并将它们存储在vector 中。接着,把该 vector 对象复

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;
[解决办法]

C/C++ code
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;} 

热点排行