我很好奇为什么像这样的一些代码会产生段错误
square->type=start.type
它们是相同类型的结构,square 是指针,而 start 不是。我认为 start.type 中的值将被复制到 square 指向的类型部分。
有人可以解释段错误背后的原因吗?
这可能是以下原因之一:
square
一片空白。square
不为空但未初始化,意味着它没有指向有效的对象。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