Кто-нибудь может обобщить, как правильно использовать realloc()
?
Что вы делаете, когда realloc()
терпит неудачу?
Из того, что я видел до сих пор, кажется, что если realloc()
терпит неудачу, вам нужно free()
старый указатель. Это правда?
Вот пример:
1. char *ptr = malloc(sizeof(*ptr) * 50);
2. ...
3. char *new_ptr = realloc(ptr, sizeof(*new_ptr) * 60);
4. if (!new_ptr) {
5. free(ptr);
6. return NULL;
7. }
Предположим, что realloc()
не работает в строке 3
. Правильно ли я делаю в строке 5
free()
ing ptr
?
malloc()
терпит неудачу,realloc()
в порядке с нулевым указателем в качестве первого аргумента - тогда он ведет себя какmalloc()
и (в этом контексте) предположительно тоже потерпит неудачу (потому что, еслиmalloc()
не может выделить 50 байт,realloc()
, вероятно, может' t также выделить 60). - person Jonathan Leffler   schedule 26.07.2010