我有相同的代码:
.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]
答案 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
,那么您的问题就会得到解决。