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