@b4n, by default the C++ vector index is unchecked, but no index is legal on a zero length vector, its UB, as the spec says about operator[] Accessing a nonexistent element through this operator is undefined behavior..

The assertions flag makes it checked, as the message you posted above says Assertion '__builtin_expect(__n < this->size(), true)' failed, and if size() is 0 its impossible for __n to be < 0.

The reason its UB is that the vector would have to have at least one member to have memory allocated be able to access vector[0], but if size() is zero it need not have any memory allocated, remember std::vector is dynamic.

The reason nothing fails without the assertion is that Scintilla uses resize() as one of my links above points out, which does not de-allocate the vector memory, and its extremely likely that the vector has some memory left from previous operations, so its internal pointer is not nullptr.

@hroncok yeah, I'm sure lots of other programs have bugs found when the flag makes vector indexing checked 😁


You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or unsubscribe.