Pointers 指针变量如何指向有效的内存位置?
我知道在取消引用任何指针变量之前,它应该指向有效的内存位置,否则就会出现分段错误,如下面的代码示例Pointers 指针变量如何指向有效的内存位置?,pointers,Pointers,我知道在取消引用任何指针变量之前,它应该指向有效的内存位置,否则就会出现分段错误,如下面的代码示例 int *ptr = 10; int y = *ptr; 我的问题是什么是分段错误以及如何避免它?当您的程序试图访问其无权访问的内存地址时,会发生分段冲突。这可以是: 尚未分配给进程的内存区域 保留给内核使用的内存区域 其保护不包括您尝试的操作的内存区域(例如,写入只读内存) 这通常发生在您尝试取消引用尚未正确初始化的指针时。除特殊情况外,初始化指针的正确方法有: 获取其他变量的地址,例
int *ptr = 10;
int y = *ptr;
我的问题是什么是分段错误以及如何避免它?当您的程序试图访问其无权访问的内存地址时,会发生分段冲突。这可以是:
- 尚未分配给进程的内存区域
- 保留给内核使用的内存区域
- 其保护不包括您尝试的操作的内存区域(例如,写入只读内存)
- 获取其他变量的地址,例如
ptr=&var代码>
- 分配动态内存:C中的
,C中的malloc/realloc
++new
- 从其他已正确初始化的指针变量赋值
从整数初始化指针,例如
int ptr=10代码>,没有定义的行为,但在大多数实现中,它只是尝试使用此虚拟内存地址。由于大多数操作系统对内核使用编号较低的地址,这通常会导致分段冲突错误。该代码根本无法编译。分段错误的含义是什么
您正在访问您现在拥有的内存段(或完全无效)<代码>如何避免它
不要执行示例中的操作。不能保证取消引用无效指针会导致segfault。。通过正确初始化指针避免分段错误。此外,在使用gcc
时,请始终使用所有警告进行编译,-Wall
,并修复所有问题。永远不要忽略编译器警告。只是为了帮助您在将来获得此网站上的帮助。