|
|
使用临时指针是为了避免在 realloc 失败时,原指针被覆盖为 NULL 导致内存泄漏。以下详细说明:
失败时原指针状态:
- realloc 失败时返回 NULL
- 原指针指向的内存块仍然存在,内容不变
- 原指针变量本身的值(即内存地址)保持不变
错误示例(会导致内存泄漏):
int *ptr = malloc(10 * sizeof(int));
// ... 使用ptr...
// 错误:直接用ptr接收realloc结果
ptr = realloc(ptr, 20 * sizeof(int)); // 如果失败,ptr变为NULL
// 此时原内存地址丢失,无法释放原内存
正确做法:
int *ptr = malloc(10 * sizeof(int));
// ... 使用ptr...
// 使用临时指针接收realloc结果
int *temp = realloc(ptr, 20 * sizeof(int));
if (temp) {
// 成功:更新ptr指向新内存,原内存已自动释放
ptr = temp;
} else {
// 失败:temp为NULL,但ptr仍指向原内存
// 此时可以根据需要继续使用原内存,或手动释放
free(ptr); // 如果不再需要原内存
ptr = NULL;
}
关键区别:
- 错误做法中,ptr直接被覆盖,原内存地址丢失
- 正确做法中,使用temp暂存结果,失败时ptr仍可用
总结:不使用临时指针,在 realloc 失败时会导致原指针被置为 NULL,从而丢失对原内存块的引用,无法释放,造成内存泄漏。使用临时指针可以避免这个问题。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|