要素数が0のときのことを忘れちゃった、というありがちなミスです。Visual C++のようなチェックが厳しいものだとv[0]で死にました。なので、char const* p = v.empty() ? NULL : &v[0]などと直していました。
今だとchar const* p = v.data();と書けばこの問題ともおさらばできるいい時代になりました。
void f(std::vector<char> const& v) { char const* p = &v[0]; // …… }
使い方ヒント: 「これは臭う」という行を見付けたら、各行のをクリックしてマーキングしておきましょう(要Twitter OAuth認証)
これが怖いので、[]演算子よりat()をメンバ関数を使ってる。効率がシビアに効いてくる場面ではだめだろうが。
コメント投稿には、twitter認証が必要です。
Twitter認証
理想を言えば new char[0]; や struct {} hoge; がアドレスを持つのと同じく、v.size() == 0 でも v[0] はアドレスを持つべきだと思うので、ウンコといえるほどひどいコードとは思えないなぁ。