#include<stdio.h> #include<malloc.h> int main(void) { int i; int length=2; int * p; p=(int *)malloc(sizeof(int)*length); printf("请输入\n"); for(i=0;i<5;i++) { printf("请输入第%d个元素:",i+1); scanf("%d",&p[i]);//取地址符是必须的 } for(i=0;i<5;i++) { printf("%d",p[i]); } return 0; }
length=2;为什么还能输入输出5个int型,不是超出分配的内存了吗?看不懂,请大家帮忙看看
恩 c语言是没有检查数组越界的.
当你越界赋值之后,它会在后面的内存里面继续赋值.
当你打印的时候自然也就打印出了后面的值,恩 这是非常危险的,不要这么做.
在Visual Studio 调试下的内存中,可以自己查看一下内存,也可以用 printf('\p',&p[i]); 把地址打印出来看看
你会占用没有分配的内存,溢出。
类似的https://www.zhihu.com/question/38970898
yi因为指针不是安全的.你会改到分配给其它地方的内存.导致野指针BUG