以下代码是什么意思?
int* pointer = malloc (sizeof(int) + 3);
pointer++;
分配的内存不能分解为sizeof(int)
的块。那么当指针被要求跳转到下一个“块”时会发生什么?是否定义了?
答案 0 :(得分:2)
代码有效但在没有更多上下文的情况下可能不常见。
第1行:malloc
分配的3个字节大于int
的大小。这是有效的。
第2行:pointer++
有效。这只是一个地址。
对pointer
的进一步引用(例如加法或减法或比较)是有效的。解引用(即*pointer
)将导致未定义的行为。
并非这3个“额外”字节是有效的存储空间,例如可以使用char *
进行寻址。
答案 1 :(得分:0)
pointer
可用于指针比较(C标准允许指针成为超过最后一个元素的一个元素)。读取或写入访问权限未定义。
答案 2 :(得分:-1)
*pointer
是0字节的3个字节和未定义的sizeof(int) - 3
个字节。未定义哪个字节[s](与int
中的重要性相关)是平台相关的(在系统bytesex上),因此就C程序而言,整个事情也可能是未定义的。