指针算术和动态记忆?

时间:2013-11-03 01:08:10

标签: c

以下代码是什么意思?

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

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

3 个答案:

答案 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程序而言,整个事情也可能是未定义的。