char * buffer = new char[SIZE];
memcpy(buffer , somedata , SIZE);
buffer[SIZE]='\0';
最後の行はメモリを破壊しますか?
buffer
は SIZE の長さで、この範囲外のデータを入れています。誰か説明してくれませんか?
char * buffer = new char[SIZE];
memcpy(buffer , somedata , SIZE);
buffer[SIZE]='\0';
最後の行はメモリを破壊しますか?
buffer
は SIZE の長さで、この範囲外のデータを入れています。誰か説明してくれませんか?
はい、それは未定義の動作です。あなたは法的な範囲を超えて書いています。
配列はC++では0ベースです。つまり、インデックス0からSIZE-1が有効です。
最後の行はメモリを破壊しますか?
はい。
buffer は SIZE の長さで、この範囲外のデータを入れています。
正しい。
誰か説明してくれませんか?
buffer は SIZE の長さで、この範囲外のデータを入れています。
SIZEインデックスに「\0」文字用のスペースが必要な場合は、サイズSIZE+1のバッファーを作成します。
はい、それはメモリを破壊します。データがゼロで終了しておらず、自分で0を追加する場合は、配列サイズをデータより1大きくする必要があります。また、インデックスはゼロベースであるため、buffer [SIZE]を設定するには、文字数をSIZE+1にする必要があります。
char* buffer = new char[SIZE+1];
// ^^
memcpy( buffer, somedata, SIZE );
buffer[SIZE]='\0';