有人能总结一下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. }
假设第3
行的realloc()
失败了,那么第5
行通过free()
释放ptr
是正确的吗?
malloc()
失败了,realloc()
对于其第一个参数为空指针也没有问题 - 它会表现得像malloc()
一样,并且(在此上下文中)可能也会失败(因为如果malloc()
无法分配50个字节,则realloc()
可能也无法分配60个字节)。 - Jonathan Leffler