请问这个函数调用为什么不执行

请问这个代码为什么不执行Output()及其之后的函数呢?

#include
int Input(int* a,int n){
    printf("请输入数组元素个数:");
    scanf("%d",&n);
     printf("请输入数组元素:");
    for(int i=0;i"%d",&a[i]);
    }
    return n;
}
void Output(int* a,int n){
    printf("这个数组是:");
    for(int i=0;i"%d",a[i]);
}
int Add(int* a,int n){
    int i,k,j;
    printf("请输入要插入的位置:");
    scanf("%d",&i);
    for(i;j>i;j++)
    a[j+1]=a[j];
    printf("请输入要插入的元素:");
    scanf("%d",&k);
    k=a[i];
    return n+1;
}
int Delete(int* a,int n){
    int i,j,k;
    printf("请输入要删除的位置:");
    scanf("%d",&i);
    for(i;j>i;j++)
    a[j-1]=a[j];
    return n-1;
}
void Find(int* a){
    int i;
    printf("请输入要查找第几个元素:");
    scanf("%d",&i);
    printf("%d",a[i+1]);
}
int main(){
    int* a;
    int n=Input(a,n);
    Output(a,n);
    Add(a,n);
    Delete(a,n);
    Find(a);
}

  • 这个代码不执行 Output() 以及其之后的函数,是因为在函数 Input() 中并没有为指针 a 分配内存空间,导致在调用其他函数时会发生未知错误。
  • 为了解决这个问题,需要在 main() 函数中为指针 a 分配足够的内存空间,可以使用动态内存分配函数 malloc() 来实现。例如,可以在 main() 函数中添加以下代码:
int main(){
    int n;
    printf("请输入数组元素个数:");
    scanf("%d", &n);
    int* a = (int*) malloc(n * sizeof(int));  // 分配内存空间
    n = Input(a, n);
    Output(a, n);
    Add(a, n);
    Delete(a, n);
    Find(a);
    free(a);  // 释放内存空间
    return 0;
}


那是Input函数就出问题崩溃了。因为你定义了指针a,可没有给它分配空间,input函数就向指针空间写入值了。指针都不知道指向哪呢
main中给a分配空间。

要么写成:
int aa[100];
int * a = aa;
或者
int *a = (int*)malloc(100*sizeof(int));