📅  最后修改于: 2023-12-03 15:39:56.383000             🧑  作者: Mango
假设我们有一个程序,在 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 = nullptr
或 c++ str = 0
。
因此,我们应该始终正确地使用 delete 或 delete[] 关键字来避免 stranded 堆内存。