我知道在解除引用任何指针变量之前它应指向有效的内存位置,否则会发生分段错误,例如此代码示例
int *ptr = 10;
int y = *ptr;
我的问题是分段错误是什么意思以及如何避免它?
答案 0 :(得分:1)
当您的程序试图访问它没有权限的内存地址时,会发生分段违规。这可以是:
当您尝试取消引用尚未正确初始化的指针时,通常会发生这种情况。除特殊情况外,初始化指针的正确方法是:
ptr = &var;
。malloc/realloc
,在C ++中分配new
您还可以添加和减去有效指针以获取新指针。只要您保持指针最初派生自的对象的大小,此指针就会有效。但是,如果你超出这些界限,你可能会或可能不会受到分段违规。大多数情况下,您只是访问内存中的某个相邻对象,导致程序错误而不是信号。
从整数初始化指针,例如int ptr = 10;
,没有定义的行为,但在大多数实现中,它只是尝试使用此虚拟内存地址。由于大多数操作系统对内核使用低编号地址,因此通常会导致分段违规错误。