C语言 在使用free函数释放空间时,为什么会出现debug assertion failed?是内存分配问题还是指针设置问题呀?

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int *Int;                                              /*定义指针变量、数组及整型变量*/
    int Number[2];
    int i,j;

    Int=(int*)malloc(sizeof(Int));                         /*赋予动态内存*/
    for(i=0;i<3;i++)                                       /*循环语句输入数字*/
    {
        Int=Number;                                        /*指针指向变量*/
        printf("请输入第%d个数:",i+1);
        scanf("%d",Int+i);
    }
    for(j=0;j<3;j++)                                       /*输出结果*/
    {
        printf("第%d个数为:%d\n",j+1,Number[j]);
    }
    free(Int);                                             /*释放空间*/
    return 0;                                              /*程序结束*/
}

Int=(int*)malloc(sizeof(Int) * 3);

int Number[2];
->
int Number[3];

你无论动态分配的还是数组,都越界了

Int = Number;
有了这一行
free(Int);
这里就不能调用了。因为Int指向的是数组Number不是malloc的地址,堆栈上数组不能释放。

参考的完整程序

 #include<stdio.h>
#include<stdlib.h>

int main()
{
    int *Int;                                              /*定义指针变量、数组及整型变量*/
    int i,j;

    Int=(int*)malloc(sizeof(Int) * 3);                         /*赋予动态内存*/
    for(i=0;i<3;i++)                                       /*循环语句输入数字*/
    {
        printf("请输入第%d个数:",i+1);
        scanf("%d",Int+i);
    }
    for(j=0;j<3;j++)                                       /*输出结果*/
    {
        printf("第%d个数为:%d\n",j+1,Int[j]);
    }
    free(Int);                                             /*释放空间*/
    return 0;                                              /*程序结束*/
}

问题解决的话,请点采纳