Rolf Magnus wrote:
Ioannis Vranos wrote:
The following code sometimes runs OK in my system, sometimes it produces
a segmentation fault (access to inaccessible memory). I filled it as a
bug of GCC, but am posting it here in case I did something wrong.
I think you did.
Of course he did. If I can suggest a good metric to the OP, when your
program crashes, well, *usually* it's the programmer's fault, not the
compiler's ;)
SomeClass::SomeClass(const SomeClass &):vec(VectorSize)
{
using namespace std;
for(TypeVector::size_type i= 0; i< vec.size(); ++i)
vec[i]= rand();
sort(vec.begin(), vec.end());
}
Here, the object changes the value used for operator< when copied, which is
likely to lead to problems with sorting your container of SomeClass
objects.
More in general, for all the containers and all the iterators defined
over a type T, the type T has to be (among other things)
CopyConstructible, that is, given an object t1 of type T,
T t(t1);
means that t and t1 are equivalent (t == t1). If your copy constructor
doesn't satisfy this rule, the algorithms (containers, pointers, etc)
behaviour is undefined.
Best wishes,
Zeppe