考虑以下代码:
jar hell
为什么int *p;
p = malloc(1);//p can point to 1 byte memory area
指向如下所示的许多存储区域?
p
答案 0 :(得分:1)
案例p+1
,p+2
等导致undefined behaviour。如该页面所述,您的程序不符合C语言的规则,因此您可能会得到的任何行为都是毫无意义的。
答案 1 :(得分:0)
C不执行任何内存地址检查。这是使c变得难以置信的高效,但也使编程更加困难的一件事。指针只是一个变量,与其他变量一样,它存储二进制数据,并且仅通过将数据视为内存地址这一事实加以区分。指针算术在c数组的情况下完全有效。
您还可以将指针设置为随机或任意值。但是,除非您以此方式进行工程设计,否则从编译器或malloc中取消引用任何地址都将导致访问您自己程序的某些存储空间,或导致分段错误。