【问题标题】:assigning NULL to a struct pointer gives error and meaning of segmentation fault将 NULL 分配给结构指针会给出错误和分段错误的含义
【发布时间】:2014-04-06 05:16:26
【问题描述】:

我有这个简单的 c,c++ 代码,运行良好:

struct node{
       int x;
       struct node* next;
       };

int main(int argc, char *argv[])
{
  int a,b,c;
  struct node *root, *node1, *node2, *leaf;


    root = malloc( sizeof(struct node) );  
    //root = NULL;
    root->next = 0;   
    root->x = 12;


  system("PAUSE");  
  return 0;
}
  1. 现在如果我指定 root = NULL 或 0,而不是 malloc,它会给我这个错误-
    “程序中出现访问冲突(分段错误)” 在下一行中,我可以将 0 分配给下一个指针。请解释

  2. 在这个论坛中,我读到当我们尝试访问安全的内存空间时会发生分段错误,而当在内存中找不到所需的数据时,操作系统将其定义为页面错误。它们有关系吗? (C的SF、C++和操作系统的SF)

【问题讨论】:

    标签: pointers null segmentation-fault initialization


    【解决方案1】:

    如果您设置root = NULL;,它将完全按照此操作,并且不会产生分段错误。

    当您尝试取消引用 NULL 指针时,段错误发生在下一行。

    如果你注释掉它下面的两行,你将不会观察到段错误。

    【讨论】:

    • 这应该是一个公认的答案!它对我有用 101%。谢谢@merlin2011
    【解决方案2】:

    您不能也不应该取消对 NULL 指针的引用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      • 2018-07-20
      • 1970-01-01
      • 1970-01-01
      • 2018-07-12
      相关资源
      最近更新 更多