0

私は同じコードを持っています:

.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]

すべてが機能します。この問題を解決するにはどうすればよいですか?

4

2 に答える 2

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;

これは恐ろしく、1 桁の値の場合は機能しません。試す

HexValue = (_command[2*i] << 8) | _command[2*i+1];
于 2013-09-04T15:57:13.840 に答える
0

私の精神的なデバッグ スキルによると、コピー コンストラクターまたはコピー代入演算子のいずれかが不足している (または、デストラクタがバッファーを適切にクリーンアップしていない) ことがわかります。

これを使えstd::string ば問題は解決します。

于 2013-09-04T15:57:23.473 に答える