Пришлось тряхнуть стариной и написать несколько сотен строк кода на С. Лет десять уже этим не занимался, расслабился и огреб по полной программе:
static char* stralloc( const char* str ) {
char* res = malloc( strlen( str + 1 ) );
strcpy( res, str );
return res;
}
Код выглядит как настоящий, замыленным взглядом ошибку увидеть сложно. А уж какие эффекты появляются! Эта функция вызывалась из двух мест:
static char* start() {
return stralloc( "{'start':true}" );
}
static char* stop() {
return stralloc( "{'stop':true}" );
}
Если вызывать только из первого места сколько угодно раз - всё работает. Если вызвать из второго места - падает при втором вызове. Если увеличить длину второй строки на один символ - опять же всё работает.
Рекомендую попробовать всем, кто использует языки с автоматическим управлением памятью. Незабываемые ощущения гарантированы!
Из блога
софт, хард & интERнет