0

这是我的代码的一部分:

for(int i=0; i<10; i++)
{
    tab[i]=new char[80];
    oss.str("");
    oss<<"line number: <<i;
    temp=oss.str();
    tab[i]=(char*)temp.c_str();
}

当我打印标签时,结果是轮流 8 和 9。我做错了吗?

4

1 回答 1

2

收集一堆评论并整合(为什么你们评论员不回答?):

您实际上正在做的是将指针值tab[i]从分配的内存更改为temp. 这是一个坏主意,因为temp一旦它被破坏就会释放它。

据我所知,你根本不需要temp

解决此问题的 C 方法是使用strcpy(tab[i], oss.str().c_str())which 将一一复制字符。请注意,您当前的代码会这样做,new char[80]因此如果您的字符串长度超过 79 个字符,它将溢出。如果您必须使用new'd 缓冲区,请使用类似new char[oss.str().size() + 1]

解决此问题的 C++ 方法是使用数组std::string而不是char*. 然后你可以分配,就像tab[i] = oss.str()它会正确复制它。它还会清理数组超出范围时使用的内存,因为您的代码现在不这样做。

于 2015-10-22T20:14:15.757 回答