📌  相关文章
📜  教资会网络 | UGC-NET CS 2017 年 11 月 – III |问题 70(1)

📅  最后修改于: 2023-12-03 15:39:56.383000             🧑  作者: Mango

UGC-NET CS 2017 年 11 月 – III |问题 70

问题描述:

假设我们有一个程序,在 C++ 中使用了指针方式处理字符串并将其存储在堆中。现在,我们想要从堆中删除该字符串。哪种情况可能导致 stranded 堆内存?

解决方案:

如果我们在 C++ 中使用指针方式处理字符串并将其存储在堆上,则要从堆中删除该字符串,我们必须使用 delete 关键字。失败使用 delete 关键字可能会导致 stranded 堆内存。

这可能发生在以下情况下:

  • 删除指向字符串的指针之前,没有解除引用该指针。
  • 在字符串删除后,继续引用或操作该指针。

为了避免 stranded 堆内存,我们应该在使用 delete 关键字之前始终解除引用指针,并且不应在删除字符串后继续使用该指针。

char* str = new char[20];
strcpy(str, "Hello, World!");
delete str; // potential for stranded heap memory

在上面的示例中,我们未使用 delete[] 关键字释放字符串内存。正确的方法是使用 delete[] 关键字而不是 delete 关键字释放字符串的内存。c++ delete[] str

如果我们需要使用指针变量,则应该将其设置为null或零来避免悬空指针。这可以通过以下方式完成:c++ str = nullptrc++ str = 0

因此,我们应该始终正确地使用 delete 或 delete[] 关键字来避免 stranded 堆内存。