好的,所以我得到了addCar,Copy_Arr和free_A这两个函数。我低音希望每次新的int * carNum指向添加到动态数组 int ** CarArray ,所以我必须使用临时数组来执行此操作。 程序一直停留在free_A函数上,我不会忘记原因。
void main()
{
int **CarArray=NULL;
int *carNum = NULL;
int *numOfCars;
numOfCars=(int)malloc(sizeof(int));
*numOfCars = 0;
addCar(CarArray,carNum,numOfCars);
}
int **addCar(int **CarArray, int *carNum, int *numOfCars)
{
int i,size;
int** temp=NULL;
temp=Build_A(temp,*numOfCars + 1);//function for memory allocation
carNum=buildNumber();
temp[*numOfCars] = carNum;
Copy_Arr(CarArray, temp,*numOfCars);
free_A(CarArray, *numOfCars);
*numOfCars = *numOfCars + 1;
CarArray=Build_A(CarArray, *numOfCars);
Copy_Arr(temp, CarArray, *numOfCars);
free_A(temp, *numOfCars);
return CarArray;
}
void Copy_Arr(int **From, int **To, int numOfCars)
{
int i,j,size = 0;
for (j = 0;j < numOfCars;j++)
{
size = From[j][0];
for (i = 0;i <size+1;i++)
{
To[j][i] = From[j][i];
}
}
}
void free_A(int **Arr, int num)
{
int i;
for (i = 0;i < num;i++)
{
free(Arr[i]);
}
free(Arr);
}
int** Build_A(int **Arr, int num)
{
Arr = (int **)malloc((num) * sizeof(int*));
int i = 0;
for (i = 0;i < num;i++)
{
Arr[i] = (int*)malloc(num * sizeof(int));
}
return Arr;
}
int *buildNumber()
{
int i,num;
int size;
int* arr=NULL;
printf("Please Enter Plate Size\n");
scanf("%d", &size);
printf("Please Enter Plate Number\n");
scanf("%d", &num);
arr = (int*)malloc((size+1) * sizeof(int));
for (i = size;i > 0;i--)
{
arr[i] = num % 10;
num = num / 10;
}
arr[0] = size;
printarr(arr);
return arr;
}
答案 0 :(得分:0)
问题应该在第18行:
Copy_Arr(CarArray, temp,*numOfCars);
因为&#39; CarArray&#39;此时为NULL。所以在第35行:
size = From[j][0];
这应该是一个错误。