参照とかヌルポインタとか。

void func( int &hoge)
{
	hoge = 1;
}

int main()
{
	int *p = 0;

	func( *p);

	return 0;
}

何の表示も行いませんが、エラーはばっちり出ます(実行時に)。
BCC5.5とVC++2008EEで確認。
「アドレス0x000... でアクセス違反が・・・」と、そんな感じ。

そこで、func()内でhogeのアドレスが有効かどうかを最初に確かめて、
無効だったら例外を投げるなり、falseを返すなり(何もしないなり)するべきなんですね。
せっかく参照にしたのにそういう問題に当たるなんて、「・・・」な気分です。
参照なんてポインタの劣化コピーじゃないかよと。