私はANSI形式のファイルを読み込むしようとしているとbinary.I'mに、この変換は、このような2つの動的メモリ割り当て宣言:char* binary_reverse = new char;
とchar * binary = new char;
新宣言は、ごみ値とヒープの破損を含むされ
しばらく私はこの(バイナリ)にはゴミ値が多すぎることがわかります。それはなぜそうですか?
私はこれらのように削除しています:delete binary_reverse;バイナリを削除する。 しかし、中にその私に与えてエラーを削除します。
ここ'ASCIItoBinary.exe': Loaded 'D:\TryingBest\Reactice\ASCIItoBinary\Debug\ASCIItoBinary.exe', Symbols loaded. 'ASCIItoBinary.exe': Loaded 'C:\Windows\SysWOW64\ntdll.dll', Cannot find or open the PDB file 'ASCIItoBinary.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll', Cannot find or open the PDB file 'ASCIItoBinary.exe': Loaded 'C:\Windows\SysWOW64\KernelBase.dll', Cannot find or open the PDB file 'ASCIItoBinary.exe': Loaded 'C:\Windows\SysWOW64\msvcr100d.dll', Symbols loaded. HEAP[ASCIItoBinary.exe]: Heap block at 00241ED0 modified at 00241EFD past requested size of 25 Windows has triggered a breakpoint in ASCIItoBinary.exe.
は、私は、コードをやっている方法です:
#include <cstring>
void AtoB(char * input)
{
unsigned int ascii; //used to store ASCII number of a character
unsigned int length = strlen(input);
//cout << " ";
for (int x = 0; x < length; x++) //repeat until the input is read
{
ascii = input[x];
char* binary_reverse = new char; //dynamic memory allocation
char * binary = new char;
//char binary[8];
int y = 0;
while (ascii != 1)
{
if (ascii % 2 == 0) //if ascii is divisible by 2
{
binary_reverse[y] = '0'; //then put a zero
}
else if (ascii % 2 == 1) //if it isnt divisible by 2
{
binary_reverse[y] = '1'; //then put a 1
}
ascii /= 2; //find the quotient of ascii/2
y++; //add 1 to y for next loop
}
if (ascii == 1) //when ascii is 1, we have to add 1 to the beginning
{
binary_reverse[y] = '1';
y++;
}
if (y < 8) //add zeros to the end of string if not 8 characters (1 byte)
{
for (; y < 8; y++) //add until binary_reverse[7] (8th element)
{
binary_reverse[y] = '0';
}
}
for (int z = 0; z < 8; z++) //our array is reversed. put the numbers in the rigth order (last comes first)
{
binary[z] = binary_reverse[7 - z];
}
//printf("the Binary is %s",binary);
//cout << binary; //display the 8 digit binary number
delete binary_reverse; //free the memory created by dynamic mem. allocation
delete binary;
}
}
は、私が「バイナリ」の正確なバイナリ値を求めています。ガベージに加えてバイナリの値ではない?ガベージの値を取り除く方法は?ヒープの破損を避けるには?
'char * binary_reverse = new char; 'と' char * binary = new char; ' - あなたが記憶のために1バイトを割り当てます。 – RbMm
トピックから:少しのコードを保存してください:' else if(ascii%2 == 1) 'はちょうど' else'です。 1つのバイナリビットを扱う場合、値は1または0のいずれかになります。それが1でなければ、それは他方でなければなりません。 – user4581301