ファイルを読み取るたびに、異なる長さのバイトを使用してバイナリ ファイルを読み取ろうとしました。値を取得したら、バイトを に変換しようとしますchar*
。
次のような簡単なコードを作成しました。
//This code is compiled in Visual Studio 2010
typedef unsigned char BYTE;
BYTE *s;
s = new BYTE[3]; // I read 2 bytes from the file, I add +1 to reserve NULL
s[0]= 'a'; s[1]='b';s[2]=NULL; //just an example I get 2 bytes from file
char* b;
b = new char(sizeof(s));
strcpy(b,(char*)s);
s[0]='x';
cout << s <<"--"<< b<< "--"<< endl;
delete[] s;
delete[] b;
cin.get();
return 0;`
ただし、コードは「ヒープ破損が検出されました」というエラーを生成します。行を削除するとdelete[] b;
、プログラムは正常に動作します。しかし、次回問題が発生するかどうかはわかりません。誰か説明してくれませんか?削除するとメモリリークが発生しdelete[] b;
ますか? コードを改善するための提案はありますか?