18 дек. 2008 г.

C++: Segmentation fault OR NOT ?

По мотивам поста Владиславыча, который многим известен заочно как Bass,
if (this != null):
#include <iostream>

class Bass {
private:
char c;
int i;
public:
Bass(const int i) {
this->i = i;
};

void crashMePlease() const {
std::cout << "value:" << &(this->i) << std::endl;
};
};

int main(int argc, char *argv[]) {
std::cout << "sizeof(char):" << sizeof(char) << std::endl << "sizeof(int):" << sizeof(int) << std::endl;
Bass *bass = 0;
bass->crashMePlease();
return 0;
};

Что будет результатом выполнения ? Свалиться ли в segfault или же не свалиться, а если не свалиться, то что скажет ?
Наверняка, для матёрых C++ программистов это пустяковый вопрос, поэтому приведу ответ:
$ g++ main.cpp -o main
$ ./main
sizeof(char):1
sizeof(int):4
value:0x4
И позже попытаюсь объяснить почему же именно так, а не иначе :)

Комментариев нет: