realloc 和数组的问题

Issues with realloc and array

我的函数得到两个存在的数组(+sizes)和指针,它们在函数中构建新数组并在最后重新分配大小。 最后函数 return 新的大小,但是新数组的 printf 崩溃了。 算法的工作原理是新尺寸确实如此。

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]);

您为 UniteArray 的第五个参数传递了 int **,但该函数需要一个 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;
}