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