double * copyTemp=NULL;
double * output= malloc(sizeof(double*)*MallSize);
double test1[] = {1.2,2.2,3.1};
double test2[]={ 0.1,0.2,0.3,0.5,0.7,1.1,1.2,2.2};
int i=0;
int j=0;
addArrayInOrder(test1 ,test2,output , &counter,&i , &j,size1,size2);
ShrinkMemory (MallSize, counter, output , copyTemp);
free(output); <- this part crashes for some reason
return 0;
我得到的問題是,有時當我打電話免費程序兌現。我沒有看到這個代碼中的任何錯誤,因爲我已經將temp設置爲NULL,所以只有一件事是指向該數組是ans指針。所以我應該可以在程序結束時自由地釋放內存。realloc和免費
功能看起來像
void addArrayInOrder(double *array1, double *array2, double *final, int *finalCounter, int *arry1Counter, int *array2Counter, int ArrSize1, int ArrSize2)
{
while (*arry1Counter < ArrSize1 && *array2Counter < ArrSize2)
{
if (isEqual(array1, array2, *arry1Counter, *array2Counter))
{
*(final + *finalCounter) = *(array1 + *arry1Counter);
arry1Counter++;
(*array2Counter)++;
(*finalCounter)++;;
}
else if (*(array1 + *arry1Counter) > *(array2 + *array2Counter))
{
*(final + *finalCounter) = *(array2 + *array2Counter);
(*array2Counter)++;
(*finalCounter)++;
}
else
{
*(final + *finalCounter) = *(array1 + *arry1Counter);
(*arry1Counter)++;
(*finalCounter)++;
}
}
}
int ShrinkMemory(int MaxSize, int MinSize, double *final, double *temp)
{
if (MaxSize != MinSize)
{
temp = realloc(final, MinSize * sizeof(double *));
if (temp == NULL)
{
printf("relloc failed ! exixting /n");
return 1;
}
else
{
printf("fsafda %p \n",temp);
printf("fsafda %p \n",final);
final=temp;
temp=NULL;
printf("fsafda %p \n",temp);
printf("fsafda %p \n",final);
}
}
return 0;
}
爲什麼會崩潰?我甚至使用prinf%對打印出來的內存和地址看起來正確
是的,我意識到我的壞。當我生病的時候不能真正編碼,只是在編碼部分執行得不好。 – user2135885 2013-03-18 13:12:20