4

下面这段代码是什么意思?

int* pointer = malloc (sizeof(int) + 3);
pointer++;

分配的内存块不能分解为 sizeof(int). 那么当指针被要求跳转到下一个“块”时会发生什么?定义了吗?

4

3 回答 3

2

该代码是有效的,但在没有更多上下文的情况下可能不寻常。

第 1 行:malloc分配比int. 这是有效的。

第 2 行:pointer++有效。这只是一个地址。

进一步的参考pointer(例如加法或减法或比较)是有效的。取消引用(即*pointer)将导致未定义的行为。

并不是说这 3 个“额外”字节是有效的存储空间,并且可以用 来寻址char *,例如。

于 2013-11-03T02:25:40.443 回答
0

pointer可用于指针比较(C 标准允许指针是最后一个元素之后的一个元素)。读取或写入访问权限未定义。

于 2013-11-03T01:35:05.543 回答
-1

*pointer是 3 个字节的 0 和sizeof(int) - 3未定义的字节。哪个字节[s](与您的 中的重要性相关int)未定义取决于平台(取决于系统 bytesex),因此就您的 C 程序而言,整个事情也可能是未定义的。

于 2013-11-03T02:28:12.643 回答