realloc和数组的问题

时间:2017-01-20 14:40:55

标签: c arrays realloc

我的函数得到两个存在的数组(+ sizes)和函数构建新数组的指针,并在最后重新分配大小。 最后函数返回新的大小,但是新数组的printf崩溃了。 算法工作casue新的大小真的。

int UniteArray(int *a,int sizeA,int *b,int sizeB,int *tempArray)
{
    int i=0,j=0,counter=0;
    tempArray=(int*)malloc(sizeA*sizeof(int));
    while (i<sizeA)
        {
            if (a[i]==b[j])
                {
                    tempArray[counter++]=a[i];
                    i++;j++;
                }
            else if (a[i]<b[j])
                i++;
            else if (b[j]<a[i])
                j++;

        }
    tempArray=(int*)realloc(tempArray,counter);
    return counter;
}

这里是函数调用;

void Ex3()
{
    int *a,*b,*unite;
    int sizeA,sizeB,newSize,counter,i;

    a=BuildArray(&sizeA);//Build the A array.
    b=BuildArray(&sizeB);           //Build the B array.                                       
    merge_sort(a,0,sizeA-1);//merge the A array.
    merge_sort(b,0,sizeB-1);            //merge the B array.

    counter=UniteArray(a,sizeA,b,sizeB,&unite);  //<<<<<<< HERE
    printf ("The new Length: %d.\n",counter);
    for (i=0;i<counter;i++)
        printf ("%d ",unite[i]);

1 个答案:

答案 0 :(得分:3)

您为int **的第五个参数传递了UniteArray,但该函数期待int *。虽然它们都是指针,但它们相同。你的编译器应该已经警告过你了。

您需要更改功能以接受int **并相应地更改对tempArray的引用。此外,您没有重新分配足够的内存。您需要将计数器乘以sizeof(int)

int UniteArray(int *a,int sizeA,int *b,int sizeB,int **tempArray)
{
    int i=0,j=0,counter=0;
    *tempArray=malloc(sizeA*sizeof(int));
    while (i<sizeA)
        {
            if (a[i]==b[j])
                {
                    (*tempArray)[counter++]=a[i];
                    i++;j++;
                }
            else if (a[i]<b[j])
                i++;
            else if (b[j]<a[i])
                j++;

        }
    *tempArray=realloc(*tempArray,counter*sizeof(int));
    return counter;
}