0

我很好奇为什么像这样的一些代码会产生段错误

square->type=start.type

它们是相同类型的结构,square 是指针,而 start 不是。我认为 start.type 中的值将被复制到 square 指向的类型部分。

有人可以解释段错误背后的原因吗?

4

1 回答 1

3

这可能是以下原因之一:

  1. square一片空白。
  2. square不为空但未初始化,意味着它没有指向有效的对象。
  3. square在执行该行之前被删除,这也意味着它没有指向有效的对象。
  4. type(如果type是类/结构并且它的赋值运算符被重载)的重载赋值运算符有问题。
  5. start是一个引用,通过引用 null 来分配,例如:

    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
    
于 2013-09-28T16:12:44.803 回答