私はWindows上で動作するコードを持っていますが、Xcode 3.2.5 C/C++コンパイラのバージョンGCC 4.2を使用してMACに移植しています。memsetはstd :: stringの割り当てでクラッシュを引き起こしています
私はそれをmemset呼び出しに絞りました。私がmemsetをコメントアウトすると動作し、コードをクラッシュさせて戻します。
私は私のヘッダファイルに次のようになります構造:次に、CPPファイルで、私はこの持ち
typedef struct
{
int deviceCount;
struct
{
#define MAX_DEVICE_ID 256
#define MAX_DEVICE_ENTRIES 10
std::string deviceId; // Device name to Open
TransportType eTransportType;
} deviceNodes[MAX_DEVICE_ENTRIES];
} DeviceParams;
を:
:DeviceParams Param;
memset(&Param, nil, sizeof(Param));
を後で私はこれを持っています...
pParam->deviceNodes[index].deviceId = "some string"; // <----- Line that crashes with memset
私がmemset呼び出しを削除すると前に言ったように、すべて正常に動作します。私がmemsetを呼び出す前に私がデバッガを見ると、構造体の文字列は\ 0であり、memsetの後はnilです。
割り当て線でnil文字列がクラッシュするのはなぜですか?MACでのみですか?
ありがとうございました。
:あなたのコードは次のようになります。 :string'は全てのNULLポインタにセットされたときに無効になる。クラスに(実際の定義を持つコンストラクタのような)些細でないコンストラクタを持つメンバが含まれている場合、そのコンストラクタは、トリビアルなコンストラクタを持つメンバをゼロにするとともに、非自明のコンストラクタを呼び出すように定義されます。だから 'eTransportType'について心配しないでください。もちろん、ネストされた型に名前を付けてそのコンストラクタを定義し、 'memset'を避けるのが最善の方法です。 – Potatoswatter
ルールを破ると、時々あなたはそれを忘れてしまいます。 –