c-指针可以指向未分配的内存吗



考虑以下代码:

int *p;
p = malloc(1);//p can point to 1 byte memory area

为什么p可以指向下面这样的许多内存区域?

printf("%p %p %p %p %p",p,p+1,p+2,p+3,p+4);

p+1p+2等情况会导致未定义的行为。正如该页面所描述的,你的程序不符合C语言的规则,所以你可能得到的任何行为都是毫无意义的。

C不进行任何内存地址检查。这是使c非常高效,但也更难编程的原因之一。指针和其他任何变量一样,只是一个存储二进制数据的变量,并且只能通过数据应该是内存地址这一事实来区分。指针算术在例如c数组的情况下是完全有效的。

您也可以设置一个指向随机或任意值的指针。但是,除非你这样设计它,否则取消引用任何不是来自编译器或malloc的地址将导致访问你自己的一些程序内存空间,或者出现分段错误。

相关内容

  • 没有找到相关文章

最新更新