我的函数得到两个存在的数组(+ 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]);
答案 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;
}