Пришлось тряхнуть стариной и написать несколько сотен строк кода на С. Лет десять уже этим не занимался, расслабился и огреб по полной программе:
static char* stralloc( const char* str ) {
char* res = malloc( strlen( str + 1 ) );
strcpy( res, str );
return res;
}
Код выглядит как настоящий, замыленным взглядом ошибку увидеть сложно. А
(
Read more... )
Comments 2
strlen(str) + 1?
А зачем так извращаться, почему не сделать глобальные переменные:
char *start = "{'start':true}";
char *stop = "{'stop':true}";
и использовать их где нужно? Всё равно твою функцию нехорошо вызывать по нескольку раз с одним параметром - она ж каждый раз честно заводит новый кусок памяти (который потом ещё и освобождать придётся).
Reply
Всё правильно. Это был ещё не боевой код, сделано для простоты управления памятью, чтобы функция, куда строки передавались, могла освобождать память - в других случаях строка формировалась в куче.
Кстати, думаю, если освобождение происходит сразу после выделения, то фрагментации памяти не происходит. Легко проверить, но лень :)
Reply
Leave a comment