以下是我的代码:
p = (float *) malloc(sizeof(float) * n);
p1 = p; // p1 is float*
p--; // Will this result in a seg-fault?
我猜是的,因为我试图访问分配空间之外的内存。 请有人确认一下吗?
修改
看到hobbs'回答我也忍不住问这个。
我坚信这不会导致段错误
printf("%f",p[n]); // because n is legally allocated for p
答案 0 :(得分:4)
你根本没有访问任何内存;你正在做指针算术。使用指针算法来获取不在对象内部或超出数组末尾的指针是未定义的行为,因此任何事情都可能发生,包括段错误。但是,在大多数合理的系统上,除非您尝试使用*p
进行某些操作,否则无将会发生。在这一点上,任何事情都可能发生,从接收垃圾值,到崩溃/段错误,再到全球热核战争。
答案 1 :(得分:3)
这将导致未定义的行为。如果您尝试通过取消引用p
来执行任何操作,程序将抛出分段错误或执行您不想要的其他操作。
答案 2 :(得分:1)
访问分配区域外的内存时,并不总是遇到seg错误。访问的内存可以分配给其他东西。因此,任何一种情况都可能发生,但两者都是不良行为。
允许指针p包含“坏”指针,不会发生不良行为。在未初始化时考虑它的状态。如果您通过解除引用来使用指针,那么您将遇到seg错误或访问其他人的内存,这是不良行为。