最近在学数据结构,感觉二级指针的用法很高级,想把数组初始化操作改成函数形式,但是运行总是闪退,发现不了有什么错误,各位大神能帮忙分析一下吗?
如下代码一为可运行成功的代码,代码二为修改后闪退的函数,
测试是scanf语句引发的闪退,注释掉就不会闪退了,但是实际运行的时候却可以运行完,或者说运行过初始化数组操作就会闪退,之后的代码也可以运行(比如在后面 加一句"printf("1");",实测可以输入最后一个数后打印出1 , 但是 注释掉还是会闪退,所以应该不是之后代码的问题),麻烦各路大神帮忙分析一下吧,感激不尽,谢谢!
1
#include<stdio.h>
#include<stdlib.h>
typedef int *intp;
//void Init(int n, intp *a );
//void print( int n, intp a );
//
int main(){
int num,i;
intp a;
printf("please input how many numbers you want to sort:");
scanf("%d",&num);
a = ( intp )malloc( num * sizeof( int ));
printf("please input numbers:\n");
for( i=0; i<num; i++ ){
printf("a[%d]=",i);
scanf("%d",&a[i]);
}
for( i=0; i<num; i++ ){
printf("a[%d]=%d",i,a[i]);
printf("\n");
}
}
2
#include<stdio.h>
#include<stdlib.h>
typedef int *intp;
void Init(int n, intp *a );
void print( int n, intp a );
int main(){
int num;
intp a;
printf("please input how many numbers you want to sort:");
scanf("%d",&num);
Init( num, &a);
print(num, a);
}
void Init(int n, intp *a){
int i;
*a = ( int * )malloc( n * sizeof( int ));
printf("please input numbers:\n");
for( i=0; i<n; i++ ){
printf("a[%d]=",i);
scanf("%d",&(*(a+i)));
}
}
void print( int n, intp a ){
int i;
for( i=0; i<n; i++ ){
printf("a[%d]=%d",i,a[i]);
printf("\n");
}
}