За что я люблю язык С

May 27, 2010 15:09


Пришлось тряхнуть стариной и написать несколько сотен строк кода на С. Лет десять уже этим не занимался, расслабился и огреб по полной программе:

static char* stralloc( const char* str ) { char* res = malloc( strlen( str + 1 ) ); strcpy( res, str ); return res; }
Код выглядит как настоящий, замыленным взглядом ошибку увидеть сложно. А ( Read more... )

Разработка, Языки

Leave a comment

Comments 2

egorius May 27 2010, 15:45:41 UTC

strlen(str) + 1?

А зачем так извращаться, почему не сделать глобальные переменные:

char *start = "{'start':true}";

char *stop = "{'stop':true}";

и использовать их где нужно? Всё равно твою функцию нехорошо вызывать по нескольку раз с одним параметром - она ж каждый раз честно заводит новый кусок памяти (который потом ещё и освобождать придётся).

Reply

all_x May 27 2010, 19:05:53 UTC
Да, выделялось на два байта меньше, чем нужно. Но каков эффект!

Всё правильно. Это был ещё не боевой код, сделано для простоты управления памятью, чтобы функция, куда строки передавались, могла освобождать память - в других случаях строка формировалась в куче.

Кстати, думаю, если освобождение происходит сразу после выделения, то фрагментации памяти не происходит. Легко проверить, но лень :)

Reply


Leave a comment

Up