char *和new的一些bug

时间:2013-09-04 15:28:38

标签: c++ object pointers memory

我有相同的代码:

.hpp文件:

class CConsoleModel
{
char* ParametersBuffer;

...

public:
CConsoleModel() ;  // - basic constructor;
~CConsoleModel() ; // -basic destructor
char *DeterminationParameter(std::string _command, int _parametersize);
...
};

.cpp文件:

char *CConsoleModel::DeterminationParameter(std::string _command, int _parametersize)
{
  ParametersBuffer = new char[_parametersize];
  unsigned int HexValue;
 _command = _command.substr(_command.length() - (_parametersize*2),(_parametersize*2));
  //do conversion of the string to the required dimension (_parametrsize):
  for (int i(0); i<_parametersize;i++)
  {
    std::stringstream CommandSteam;
    CommandSteam<< std::hex <<_command[2*i];
    CommandSteam<< std::hex <<_command[2*i +1];
    CommandSteam >> std::hex >> HexValue;
    ParametersBuffer[i] = static_cast<char> (HexValue);
  }
  return  ParametersBuffer;
}

程序构建,但运行时崩溃。

如果我更改ParametersBuffer = new char[_parametersize]

char* ParametersBuffer = new char[_parametersize]

一切正常。 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

我们强烈建议您使用std::vector代替手动内存分配。

class CConsoleModel
{
    std::vector<char> ParametersBuffer;

ParametersBuffer.resize(_parametersize);

...

return &ParametersBuffer[0];

顺便说一句

std::stringstream CommandSteam;
    CommandSteam<< std::hex <<_command[2*i];
    CommandSteam<< std::hex <<_command[2*i +1];
    CommandSteam >> std::hex >> HexValue;

非常糟糕,只有单位数值时才会起作用。尝试

HexValue = (_command[2*i] << 8) | _command[2*i+1];

答案 1 :(得分:0)

我的通灵调试技巧告诉我你缺少复制构造函数或复制赋值运算符(或者你的析构函数没有正确清理缓冲区)。

如果您只是使用std::string,那么您的问题就会得到解决。