0
char * buffer = new char[SIZE];
memcpy(buffer , somedata , SIZE);

buffer[SIZE]='\0';

最後の行はメモリを破壊しますか? bufferは SIZE の長さで、この範囲外のデータを入れています。誰か説明してくれませんか?

4

4 に答える 4

3

はい、それは未定義の動作です。あなたは法的な範囲を超えて書いています。

配列はC++では0ベースです。つまり、インデックス0からSIZE-1が有効です。

于 2013-02-17T14:23:18.147 に答える
3

最後の行はメモリを破壊しますか?

はい。

buffer は SIZE の長さで、この範囲外のデータを入れています。

正しい。

誰か説明してくれませんか?

buffer は SIZE の長さで、この範囲外のデータを入れています。

于 2013-02-17T14:32:05.700 に答える
1

SIZEインデックスに「\0」文字用のスペースが必要な場合は、サイズSIZE+1のバッファーを作成します。

于 2013-02-17T14:24:38.293 に答える
1

はい、それはメモリを破壊します。データがゼロで終了しておらず、自分で0を追加する場合は、配列サイズをデータより1大きくする必要があります。また、インデックスはゼロベースであるため、buffer [SIZE]を設定するには、文字数をSIZE+1にする必要があります。

char* buffer = new char[SIZE+1];
//                          ^^ 
memcpy( buffer, somedata, SIZE );
buffer[SIZE]='\0';
于 2013-02-17T14:25:52.080 に答える