Я пытаюсь прочитать файл в формате ANSI и конвертирование это binary.I'm объявить два динамического распределения памяти, как это: char* binary_reverse = new char;
и char * binary = new char;
Новая декларация, содержащая значение мусора и кучи коррупции при использовании удалить
While debugging Я вижу, что это (двоичный) содержит слишком много значений мусора. Почему это так?
Я удаляю их как: 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 = новый символ; 'и' char * binary = new char; '- поэтому вы выделяете 1 байт для хранения – RbMm
Off topic: сохраняйте бит кода:' else if (ascii% 2 == 1) 'может просто быть' else'. При работе с одним двоичным битом это значение будет равно 1 или 0. Если это не одно, это должно быть другое. – user4581301