读书人

该C程序输出很奇怪?解决思路

发布时间: 2012-05-06 16:15:43 作者: rapoo

该C程序输出很奇怪???
我这程序打印出来的东西很奇怪啊,能不能帮我看看呢?
程序很简单的,但是打印出来却很奇怪,像是输出了地址,我没有调试出来!

题目的意思:
这题目的意思是说输入2个递增的数组,然后将2个数组合并后要求还是递增的

C/C++ code
#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");}


[解决办法]
C/C++ code
#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));
[解决办法]

探讨
我看到老师在程序里面加了new。加了new之后,是不是还应该delete啊?而且还有一个问题,new是c++里面的,c语言里面是malloc,为什么c里面能用c++里面的new呢(而且还不用引入c++的头文件)?为此我还去百度了c和c++的关系,呵呵,老师能否为我解答一下?

读书人网 >C语言

热点推荐