此代码是否会防止指针悬空? void\u this() { string a=“我是”;//变量a的原始值 string*modifier=NULL;//指针声明为0x0000。。。 modifier=&a;//0x0000->0x0a//modifier存储 *modifier=“modified”//0x0a+0x0modified…//modifier将“modified”赋值给一个地址; CUT< P>我假定你使用的是C++而不是C,当你说String时,你是指::STD::String

此代码是否会防止指针悬空? void\u this() { string a=“我是”;//变量a的原始值 string*modifier=NULL;//指针声明为0x0000。。。 modifier=&a;//0x0000->0x0a//modifier存储 *modifier=“modified”//0x0a+0x0modified…//modifier将“modified”赋值给一个地址; CUT< P>我假定你使用的是C++而不是C,当你说String时,你是指::STD::String ,c++,pointers,C++,Pointers,上面的代码中没有显示内存泄漏 另外,只有当对象超出范围或被删除时,悬空指针才真正起作用。在这里,这两种操作都不做。代码中没有悬空指针。在几行中,左手(第一行)注释是错误的,而第二条注释是正确的。例如,//0x0000->0x0a//modifier存储a的地址:在该行之后,modifier保存变量a的地址,该地址几乎肯定不同于物理地址0x0a悬空指针是指向invali的指针d内存(不是空的)。通常与最初指向有效内存的指针相关联 void _this() { string a

上面的代码中没有显示内存泄漏


另外,只有当对象超出范围或被删除时,悬空指针才真正起作用。在这里,这两种操作都不做。

代码中没有悬空指针。在几行中,左手(第一行)注释是错误的,而第二条注释是正确的。例如,
//0x0000->0x0a//modifier存储a的地址
:在该行之后,
modifier
保存变量
a
的地址,该地址几乎肯定不同于物理地址
0x0a

悬空指针是指向invali的指针d内存(不是空的)。通常与最初指向有效内存的指针相关联

void _this()
{
    string  a        = "i am a"; // original value of variable a
    string* modifier = NULL;     //pointer is declared 0x0000...

    modifier  = &a;              // 0x0000 -> 0x0a //modifier stores the address of a 
    *modifier = "modified";      // 0x0a + 0x0modified... //modifier assigns "modified" to the address of a;

    cout << a << endl << modifier<<"\n"; //shows "modified" + the address of modifier in memory
    modifier = NULL;                     // the pointer(modifier...) now points to nothing....is it no longer "dangling"???
    cout << modifier;                    // shows only zeros...000000000
}
在您最初的示例中,指针永远不会悬空,因为它指向一个始终有效的自动变量(而修饰符是有效的)。不过,如果您从函数返回modified,它将悬空(如果您没有指定NULL)

在删除C后将空值分配给指针是非常重要的,但是C++中没有太多的内容,因为指针应该封装在一个类中,这样当它的使用完成时它就不再可用了。

int x = new int(4);    // x valid;
delete x;              // x is now dangling.
                       // It points at memory that does not belong to application

x = NULL;              // x is not dangling.

我不明白这个问题,代码太复杂了。你为什么要这样写代码?它有什么用?C中没有
string
;也没有
cout
,而
的用法简短的回答是否定的,因为
string
对象(a)和
字符串*
指针(修饰符)谢谢。是的,谢谢。是的,它是C++代码,但是我加上标签和C,因为指针的概念是C/C++的90%的时间。现在我看,我的想法是正确的。10X…现在更清楚了。所以对象应该永远超出范围或者被删除,使指针变得悬空。
std::string    data;   // There is a pointer inside here.
                       // No need to set it to NULL. The destructor handles all that.