http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59829
Bug ID: 59829 Summary: Calling vector::data() occurs undefined behavior when the vector is empty Product: gcc Version: 4.8.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: lin90162 at gmail dot com When vector is empty, calling vector::data() occurs undefined behavior by dereferencing NULL. The implementation of vector::data() and vector::front() in libstdc++ are below /// BEGIN OF CODE reference front() { return *begin(); } const_reference front() const { return *begin(); } data() _GLIBCXX_NOEXCEPT { return std::__addressof(front()); } data() _GLIBCXX_NOEXCEPT { return std::__addressof(front()); } /// END OF CODE Here, when vector is empty, begin() is called, then begin() returns NULL and it is dereferenced. N3337 23.3.6.4 says "Returns: A pointer such that [data(),data() + size()) is a valid range. For a non-empty vector, data() == &front()". It means that calling vector::data() is well-defined even if vector is empty. As additional information, libc++ implementation of vector::data() can be called safely when vector is empty.