故尘 发布留言 2008-10-10 13:38 线性表的合并问题,其中判断数据的合法性难以实现程序如下,请高手调试一下 /*程序人:李辉 时间:2008年10月8日 */ #include #include int M,N; int a; void one(int a1[],int a2[],int a3[]); void law(int e[],int f); void Input(int u[],int g); //主函数 void main() { int *arrA,*arrB,*arrC; int d; arrA=(int*)malloc(M*sizeof(int)); arrB=(int*)malloc(N*sizeof(int)); arrC=(int*)malloc((M+N)*sizeof(int));//动态分配内存
//输入arrA中元素的个数及值 printf("\nPlease input the num of the arrA:M="); scanf("%d",&M); printf("\ninput the data of arrA:\n"); a=1; while(a==1) { Input(arrA,M); law(arrA,M); } system("pause");
//输入arrB中元素的个数及值 printf("\nPlease input the num of the arrB:N="); scanf("%d",&N); printf("\ninput the data of arrB:\n"); a=1; while(a==1) { Input(arrB,N); law(arrB,N); } system("pause"); one(arrA, arrB, arrC); //输出arrC printf("\narrC=\n"); for(d=0;d printf("%10d",arrC[d]); printf("\n"); } //整合输入的两组数据为一组新的非递减数 void one(int a1[],int a2[],int a3[]) { int x=0,y=0; int k=0; while((x { if(a1[x]<=a2[y]) a3[k++]=a1[x++]; else a3[k++]=a2[y++]; } while(x a3[k++]=a1[x++]; while(y a3[k++]=a2[y++]; } //输入一组数据 void Input(int u[],int g) { int i; for(i=0;i scanf("%d",&u,int f) { int z; for(z=0;z { if((e[z]<=e[z+1])||(f==1)) { a=0; } else { printf("\n此为非法数据!!!!!!!!!!!!\n Please input again!\n"); a=1; break; } } }故尘 发布留言 2008-10-10 15:11 虚心求教
请给点意见
先谢过啦!!!!![em01]伤狼 发布留言 2008-10-10 15:26 不知道 你想要问什么呢故尘 发布留言 2008-10-10 20:51 调试总是出错 又找不到到底错在哪儿 感觉是函数law()里面有问题或者是在main()中调用时出了错smltq 发布留言 2008-10-10 21:42 这种问题自己单步最好发现问题所在啦。。。josen0205 发布留言 2008-10-10 22:20 在void law(int e[],int f)函数中 if((e[z]<=e[z+1])||(f==1))数组e中有f个数,当循环到z等于f-1的时候,e[z+1]出界了,所以应该是for(z=0; z < f-1; z++),另外还有一点,就是你程序的三个数组都是动态分配内存的,然后你main函数的最后没有释放分配的内存,造成内存泄露。当然你这个是小程序,结束了之后操作系统自动会收回其内存,但是应该还是要注意。
页: [1] 特别说明:如网页特效代码中有引用图片文件等,请自己下载到本地调试! |