C 指向指针的指针数组删除错误
好的,我得到了函数addCar、Copy_Arr和free_A。我基本上希望每次指向新的int*carNum时都添加到动态数组int**CarArray,所以我必须使用临时数组来完成。 这个程序一直被困在免费函数上,我不明白为什么C 指向指针的指针数组删除错误,c,arrays,pointers,C,Arrays,Pointers,好的,我得到了函数addCar、Copy_Arr和free_A。我基本上希望每次指向新的int*carNum时都添加到动态数组int**CarArray,所以我必须使用临时数组来完成。 这个程序一直被困在免费函数上,我不明白为什么 void main() { int **CarArray=NULL; int *carNum = NULL; int *numOfCars; numOfCars=(int)malloc(size
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;
}
void main()
{
int**CarArray=NULL;
int*carNum=NULL;
国际*NUMOFARS;
numocars=(int)malloc(sizeof(int));
*numOfCars=0;
addCar(卡拉雷、卡努姆、努莫夫卡尔);
}
int**addCar(int**CarArray,int*carNum,int*numfcars)
{
int i,大小;
int**temp=NULL;
temp=Build_A(temp,*numfcars+1);//用于内存分配的函数
carNum=buildNumber();
温度[*numfcars]=卡努姆;
复印件(焦距、温度、*numOfCars);
免费(卡拉雷,*numOfCars);
*numOfCars=*numOfCars+1;
卡拉雷=建造(卡拉雷,*numOfCars);
副本(临时、临时、临时、临时);
免费(临时,*numOfCars);
返回卡拉雷;
}
无效副本(整数**从,整数**到,整数)
{
int i,j,大小=0;
对于(j=0;j
问题应该在第18行:
Copy_Arr(CarArray, temp,*numOfCars);
因为此时“CarArray”为空。所以在第35行:
size = From[j][0];
这应该是一个错误。您是否可以包括
Build\u A
?并显示如何调用上述所有函数,或者最好显示A。我添加了void main和Build\u ano,这不是直接相关的,而是numocars=(int)malloc(sizeof(int));
是毫无意义的。动态分配单个int
有什么具体原因吗?无论如何,它至少应该是numocars=(int*)malloc(sizeof(int));
或者更好的numocars=malloc(sizeof(int))
好的,我将删除它。当CarArray为null*numfcars为0时,它甚至不会进入循环。我调试了它,并在尝试释放**temp或**carArray@Okr100什么是buildNumber
?问题可能就在那里(不是开玩笑).Show a.@MichaelWalz添加了buildNumber。这只是一个函数,用于构建一个数字数组。@Okr100好的,现在我们可能可以提供帮助。buildNumber
函数可能有一个微妙的错误,以后会产生戏剧性的后果。它还帮助我们构建一个(顺便说一句,您应该提供)。