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

时间:2018-11-05 03:15:17

标签: c memory-management malloc pointer-arithmetic

考虑以下代码:

jar hell

为什么int *p; p = malloc(1);//p can point to 1 byte memory area 指向如下所示的许多存储区域?

p

2 个答案:

答案 0 :(得分:1)

案例p+1p+2等导致undefined behaviour。如该页面所述,您的程序不符合C语言的规则,因此您可能会得到的任何行为都是毫无意义的。

答案 1 :(得分:0)

C不执行任何内存地址检查。这是使c变得难以置信的高效,但也使编程更加困难的一件事。指针只是一个变量,与其他变量一样,它存储二进制数据,并且仅通过将数据视为内存地址这一事实加以区分。指针算术在c数组的情况下完全有效。

您还可以将指针设置为随机或任意值。但是,除非您以此方式进行工程设计,否则从编译器或malloc中取消引用任何地址都将导致访问您自己程序的某些存储空间,或导致分段错误。