W rzeczywistości błąd segmentacji występuje w innym programie, który próbowałem skompilować, co dzieje się z powodu tego zachowania.Delegowanie konstruktora daje błąd segmentacji przy użyciu pola klasy dla argumentu
Moje pytanie brzmi:
Jest to bug czy moja wina?
Powtarzalne w jakikolwiek sposób (nawet jeśli pole something
są prywatne lub chronione) i tu jest mój przykład:
main.cc:
#include <iostream>
class Test {
public:
const char* something = "SOMETHING HERE!!!";
Test(const int& number) : Test(something, number) { }
// XXX: changed `something` to `_something` to make it different
Test(const char* _something, const int& number) {
std::cout << _something << std::endl;
std::cout << number << std::endl; }
~Test() { }
};
int main(int argc, char* argv[]) {
Test te1(345);
Test te2("asdasdad", 34523);
return 0;
}
I tu jest to, co się dzieje, gdy Kompilacja z:
g++ main.cc -Os -o main
i uruchamiana z:
./main
wyjście jest:
[email protected]:~/ $ ./main
A"�~ <-- this is random
345
asdasdad
34523
Ale kiedy umożliwiają optymalizację z -O0
lub -O1
lub -O2
... wyjście jest tylko nowa linia:
[email protected]:~/ $ ./main
[email protected]:~/ $
G ++ wersja:
[email protected]:~/ $ g++ --version
g++ (Raspbian 6.3.0-18+rpi1) 6.3.0 20170516
W następnym wierszu 'const char * something =" COŚ TUTAJ !!! ";" czy miałeś na myśli 'coś"? Jeśli nie, to ta zmienna nie została ustawiona. – Mixhab
Wszystko jest tak, jak to wyjaśniłem w treści pytania. –
Dość interesujące. – 0x499602D2