Taras Glek Mozilla работал в прошлом году или два согласно анализу C++ и инструментам перезаписи кода. Его блог в http://blog.mozilla.com/tglek/ , можно найти ссылки на инструменты, которые они создали там. Они, конечно, свободны и с открытым исходным кодом. Никакой GUI, но я думал, что свяжу его в случае, если это интересно кому-либо.
Нет, не делает. Этот аспект часто раздражал меня, поскольку вы не можете просто использовать:
if ((buff = realloc (buff, newsize)) == NULL)
return;
в своем коде, если вы хотите, чтобы освободил оригинал в случае ошибки. Вместо этого вы должны сделать что-то вроде:
if ((newbuff = realloc (buff, newsize)) == NULL) {
free (buff);
return;
}
buff = newbuff;
Конечно,
указанный размер. В противном случае, если ptr
не соответствует указателю, ранее возвращенному
calloc
, malloc
или realloc
, либо если пространство было освобождено вызовом
для функции free
или realloc
поведение не определено. Если память на новый
объект не может быть выделен, старый объект не освобожден, и его значение не изменилось.
realloc ()
возвращает указатель на вновь выделенную память, которая соответствующим образом выровнена для любого типа переменной и может отличаться отptr
или] NULL
, если запрос не выполняется. Еслиsize
был равен 0, возвращается либоNULL
, либо указатель, пригодный для передачи вfree ()
. Еслиrealloc ()
дает сбой, исходный блок остается нетронутым; он не освобождается и не перемещается.
Нет. Если realloc ()
не удалось изменить предыдущий буфер.
man
realloc (3)
:
realloc ()
возвращает указатель на новый выделенная память, которая подходит выровнен для любого типа переменной и может отличаться отptr
илиNULL
, если запрос не выполняется. Если размер был равен 0, либоNULL
, либо указатель, подходящий для передано вfree ()
возвращается. Еслиrealloc ()
дает сбой, исходный блок остается нетронутый; он не освобождается и не перемещается.