2013-09-28 174 views
0

我很好奇,为什么一些像这样的代码给出了一个段错误复制的结构指针的指针

square->type=start.type 

他们是同一类型的结构,广场是一个指针,开始是没有的。我认为start.type中的值将被复制到square指向的类型部分。

有人可以解释segfault背后的原因吗?

+1

广场一个空指针 – FRob

+0

如果你显示更多的代码,比如使用它的上下文会更好。但是让这个代码工作'square'需要不是NULL。 – fen

+0

这条线本身没有错。如果失败,那是因为方形指针有问题。 – john

回答

3

这可能是以下原因之一:

  1. square为空。
  2. square不为空,但未初始化,表示它没有指向有效的对象。
  3. square在执行该行之前被删除,这也意味着它没有指向有效的对象。
  4. 重载赋值运算符type(如果type是一个类/结构并且它的赋值运算符被重载),有些地方是错误的。
  5. start是一个参考,被deferencing空分配,例如:

    Apple *apple=0; 
    Apple &start = *apple; 
    
  6. start是一些参考和东西被删除,如:

    Apple *apple=new Apple(); 
    Apple &start = *apple; 
    delete apple; 
    square->type = start.type; // this line may not cause segfault but this is actually undefined behavior