该C程序输出很奇怪???
我这程序打印出来的东西很奇怪啊,能不能帮我看看呢?
程序很简单的,但是打印出来却很奇怪,像是输出了地址,我没有调试出来!
题目的意思:
这题目的意思是说输入2个递增的数组,然后将2个数组合并后要求还是递增的
#include<stdio.h>void initialize(int* length1,int* length2,int array1[],int array2[]);int* arrayMerge(int array1[],int array2[],int length1,int length2);void output(int* array3,int length3);int main(){ int array1[10]; int array2[10]; int* array3; int* array4; int length1; int length3; int length2; initialize(&length1,&length2,array1,array2); array4=array3=arrayMerge(array1,array2,length1,length2); length3=length1+length2; for(int i=0;i<length3;i++){ printf("%d ",array4[i]); } printf("\n=======================\n"); output(array3,length3); return 0;}void initialize(int* length1,int* length2,int array1[],int array2[]){ int i; printf("please input array1's length:"); scanf("%d",length1); printf("input array1:"); for(i=0;i<*length1;i++){ scanf("%d",&array1[i]); } printf("please input array2's length:"); scanf("%d",length2); printf("input array2:"); for(i=0;i<*length2;i++){ scanf("%d",&array2[i]); }}int* arrayMerge(int array1[],int array2[],int length1,int length2){ int maxlen,i; int mark1=0; int mark2=0; int array3[20]; maxlen=length1+length2; for(i=0;i<maxlen;i++){ if(mark1==length1){ array3[i]=array2[mark2]; mark2++; continue; } if(mark2==length2){ array3[i]=array1[mark1]; mark1++; continue; } if(array1[mark1]<array2[mark2]){ array3[i]=array1[mark1]; mark1++; }else{ array3[i]=array2[mark2]; mark2++; } } for(i=0;i<5;i++){ printf("%d ",array3[i]); } printf("\n@@@@@@@@@@@@@@@@\n"); return array3;}void output(int* array3,int length3){ for(int i=0;i<length3;i++){ printf("%d ",*(array3+i)); } printf("\n");}#include<stdio.h>void initialize(int* length1,int* length2,int array1[],int array2[]);int* arrayMerge(int array1[],int array2[],int length1,int length2);void output(int* array3,int length3);int main(){ int array1[10]; int array2[10]; int* array3; int* array4; int length1; int length3; int length2; initialize(&length1,&length2,array1,array2); array4=array3=arrayMerge(array1,array2,length1,length2); length3=length1+length2; for(int i=0;i<length3;i++){ printf("%d ",array4[i]); } printf("\n=======================\n"); output(array3,length3); return 0;}void initialize(int* length1,int* length2,int array1[],int array2[]){ int i; printf("please input array1's length:"); scanf("%d",length1); printf("input array1:"); for(i=0;i<*length1;i++){ scanf("%d",&array1[i]); } printf("please input array2's length:"); scanf("%d",length2); printf("input array2:"); for(i=0;i<*length2;i++){ scanf("%d",&array2[i]); }}int* arrayMerge(int array1[],int array2[],int length1,int length2){ int maxlen,i; int mark1=0; int mark2=0; maxlen=length1+length2; int *arrayHeap=new int[maxlen]; for(i=0;i<maxlen;i++){ if(mark1==length1){ arrayHeap[i]=array2[mark2]; mark2++; continue; } if(mark2==length2){ arrayHeap[i]=array1[mark1]; mark1++; continue; } if(array1[mark1]<array2[mark2]){ arrayHeap[i]=array1[mark1]; mark1++; }else{ arrayHeap[i]=array2[mark2]; mark2++; } } for(i=0;i<5;i++){ printf("%d ",arrayHeap[i]); } printf("\n@@@@@@@@@@@@@@@@\n"); return arrayHeap;}void output(int* array3,int length3){ for(int i=0;i<length3;i++){ printf("%d ",*(array3+i)); } printf("\n");}
[解决办法]
arrayMerge中array3是局部变量,函数结束时会释放掉,所以输出是错误的。
改成
int *array3 =(int *)malloc(sizeof(int)*(length1+length2));
[解决办法]