If a C programmer asks "do you want to see something cool?", run away.
--John Van Enk

Thursday, August 2, 2007

Просто undefined behaviour

Вот такой простой код приводит к undefined behaviour.


#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char *argv[])
{
char*str="Hello, world";
cout <<str<<endl;
str[6]='!';
cout <<str<<endl;
return EXIT_SUCCESS;
}

А все потому ,что строковый литерал есть "массив с надлежащим количеством константных символов", и, следовательно, присваивание константе незаконно. И поймать это можно только в рантайме. В моем тестовом случае это привело к segmentation fault.