首页新闻找找看学习计划

关于malloc()内存分配

0
[已解决问题] 解决于 2016-07-26 19:03
#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型,不是超出分配的内存了吗?看不懂,请大家帮忙看看

October3的主页 October3 | 菜鸟二级 | 园豆:204
提问于:2016-07-25 23:04
< >
分享
最佳答案
0

 恩 c语言是没有检查数组越界的.

当你越界赋值之后,它会在后面的内存里面继续赋值.

当你打印的时候自然也就打印出了后面的值,恩 这是非常危险的,不要这么做.

在Visual Studio 调试下的内存中,可以自己查看一下内存,也可以用 printf('\p',&p[i]); 把地址打印出来看看

奖励园豆:5
小精灵儿Pawn | 菜鸟二级 |园豆:470 | 2016-07-25 23:12
其他回答(2)
0

你会占用没有分配的内存,溢出。

类似的https://www.zhihu.com/question/38970898

金武飞扬 | 园豆:210 (菜鸟二级) | 2016-07-25 23:18
0

yi因为指针不是安全的.你会改到分配给其它地方的内存.导致野指针BUG

吴瑞祥 | 园豆:28736 (高人七级) | 2016-07-26 08:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册