У меня есть следующая программа test.cc:
#include <iostream>
unsigned char bogus1[] = {
// Changing # of periods (0x2e) changes output after periods.
0x2e, 0x2e, 0x2e, 0x2e
};
unsigned int bogus2 = 1816; // Changing this value changes output.
int main()
{
std::clog << bogus1;
}
Я строю это с:
g++ -g -c -o test.o test.cc; g++ -static-libgcc -o test test.o
Использование g ++ версии 3.4.6
Я провожу его через valgrind и ничего не сообщается неправильно.
Однако вывод имеет два дополнительных управляющих символа и выглядит следующим образом:
....
Это control-X и control-G в конце.
Если вы измените значение bogus2, вы получите разные управляющие символы. Если вы измените количество периодов в массиве, проблема исчезнет или изменится.
Я подозреваю, что это ошибка повреждения памяти в пакете компилятора или iostream.
Что здесь происходит?