这会导致seg故障

以下是我的代码:

p = (float *) malloc(sizeof(float) * n); p1 = p; // p1 is float* p--; // Will this result in a seg-fault? 

我猜是的,因为我试图访问分配空间之外的内存。 有人可以确认一下吗?

编辑看到霍布斯的回答后,我忍不住问这个问题。

我坚信这不会导致段错误

 printf("%f",p[n]); // because n is legally allocated for p 

你根本没有访问任何内存; 你在做指针算术。 使用指针算法获取不在对象内部或超出数组末尾的指针是未定义的行为,因此可能发生任何事情,包括段错误。 但是,在大多数合理的系统中,除非你尝试使用*p某些操作,否则什么都不会发生。 此时,任何事情都可能发生,从接收垃圾值,到崩溃/段错误,再到全球热核战争。

它将导致未定义的行为。 如果您尝试通过取消引用来p执行任何操作,程序将抛出分段错误或执行您不想要的其他操作。

访问分配区域外的内存时,并不总是遇到seg故障。 访问的内存可以分配给其他东西。 所以两种情况都可能发生,但两者都是不良行为。

允许指针p包含“坏”指针,不会发生不良行为。 在未初始化时考虑其状态。 如果您通过解除引用来使用指针,那么您将遇到seg错误或访问其他人的内存,这是不良行为。