相关疑难解决方法(0)

删除指针后将指针NULL化是一种好习惯吗?

我首先要说的是,使用智能指针,你永远不必担心这一点.

以下代码有什么问题?

Foo * p = new Foo;
// (use p)
delete p;
p = NULL;
Run Code Online (Sandbox Code Playgroud)

这是由另一个问题的回答和评论引发的.Neil Butterworth的一条评论产生了一些赞成:

在删除后将指针设置为NULL不是C++中的通用优良做法.有时候它是一件好事,有时它是毫无意义的,可以隐藏错误.

有很多情况下它无济于事.但根据我的经验,它不会伤害.有人开导我.

c++ null pointers dynamic-allocation

139
推荐指数
6
解决办法
8万
查看次数

为什么在释放指向它的指针后仍然可以访问结构的成员?

如果我定义一个结构......

struct LinkNode
{
  int node_val;
  struct LinkNode *next_node;
};
Run Code Online (Sandbox Code Playgroud)

然后创建一个指向它的指针......

struct LinkNode *mynode = malloc(sizeof(struct LinkNode));
Run Code Online (Sandbox Code Playgroud)

......然后终于免费()它......

free(mynode);
Run Code Online (Sandbox Code Playgroud)

...我仍然可以访问结构的'next_node'成员.

mynode->next_node
Run Code Online (Sandbox Code Playgroud)

我的问题是:底层机制的哪一部分跟踪这个内存块应该代表一个结构LinkNode的事实? 我是C的新手,我期望在我使用指向我的LinkNode的指针上的free()后,我将无法再访问该结构的成员.我期待某种"不再可用"的警告.

我想更多地了解基础流程的工作原理.

c struct pointers memory-management

7
推荐指数
3
解决办法
1802
查看次数

标签 统计

pointers ×2

c ×1

c++ ×1

dynamic-allocation ×1

memory-management ×1

null ×1

struct ×1