我很好奇为什么像这样的代码会产生段错误
square->type=start.type
它们是相同类型的结构,square是指针而start不是。我认为start.type中的值将被复制到square指向的类型部分。
有人可以解释段错的原因吗?
答案 0 :(得分:3)
这可能是以下原因之一:
square
为空。square
不是null但未初始化,意味着它没有指向有效对象。square
在执行该行之前被删除,这也意味着它没有指向有效的对象。type
的重载赋值运算符出错了(如果type
是一个类/结构,并且它的赋值运算符被重载了。) start
是一个引用,并通过引用null来分配,例如:
Apple *apple=0;
Apple &start = *apple;
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