C 字符*(*车辆)[5];动态分配

C 字符*(*车辆)[5];动态分配,c,pointers,dynamic-memory-allocation,C,Pointers,Dynamic Memory Allocation,我试图在C中为以下内容动态分配空间,我想知道是否有人可以解释如何分配空间?字符*(*车辆)[5] 这5个元素是车辆的详细信息,第一个数组用于不同的车辆。所以我尝试为不同的车辆动态分配空间,每辆车都有5个点来显示字符串细节。执行下面的代码将只分配行,但由于定义中指定了5,我是否需要将分配中的车辆数乘以?此外,该数据类型来自api,因此很遗憾,我无法更改它,并且我不确定车辆的类型,我的印象是变量名 目前我正在做: char* (*vehicle)[][5]; vehicle = malloc(si

我试图在C中为以下内容动态分配空间,我想知道是否有人可以解释如何分配空间?字符*(*车辆)[5]

这5个元素是车辆的详细信息,第一个数组用于不同的车辆。所以我尝试为不同的车辆动态分配空间,每辆车都有5个点来显示字符串细节。执行下面的代码将只分配行,但由于定义中指定了5,我是否需要将分配中的车辆数乘以?此外,该数据类型来自api,因此很遗憾,我无法更改它,并且我不确定车辆的类型,我的印象是变量名

目前我正在做:

char* (*vehicle)[][5];

vehicle = malloc(sizeof(char*) * numVehicles);

这似乎在代码中起作用,但我觉得我没有正确地进行分配

由于这是指向
char*
指针的2D数组的指针,其中次要维度是5,主要维度是动态的,可能等于
numVehicles
,因此它很可能是:

vehicle = malloc(sizeof(char*) * numVehicles * 5);

由于这是指向
char*
指针的2D数组的指针,其中次要维度是5,主要维度是动态的,可能等于
numVehicles
,因此它很可能是:

vehicle = malloc(sizeof(char*) * numVehicles * 5);

由于这是指向
char*
指针的2D数组的指针,其中次要维度是5,主要维度是动态的,可能等于
numVehicles
,因此它很可能是:

vehicle = malloc(sizeof(char*) * numVehicles * 5);

由于这是指向
char*
指针的2D数组的指针,其中次要维度是5,主要维度是动态的,可能等于
numVehicles
,因此它很可能是:

vehicle = malloc(sizeof(char*) * numVehicles * 5);

您的分配显然不正确,因为它没有考虑指针指向的数组类型中的
5
。如果您的代码通过自身的错误“补偿”分配错误,例如,不使用该
5
提供的任何额外内存,则它可能在代码中工作。我们看不到您的其他代码,这就是为什么没有办法说为什么它看起来工作

无论如何,你可以通过

vehicle = malloc(numVehicles * sizeof **vehicle);
sizeof**vehicle
将为您提供
sizeof(char*[5])

现在您可以按如下方式访问数组元素:

(*vehicle)[vehicle_index][0] = "Ford Focus";
(*vehicle)[vehicle_index][1] = "ABS";
(*vehicle)[vehicle_index][2] = "Sunroof";
...

但是,奇怪的是,您希望将
vehicle
作为指向未指定大小数组的指针,这就是您的
vehicle
的声明方式。它会起作用,但似乎不必要地过于复杂。如果您有选择,将
车辆
声明为

char *(*vehicle)[5];
并将其分配为

vehicle = malloc(numVehicles * sizeof *vehicle);
在这种情况下,您将有太多的访问权限

vehicle[vehicle_index][0] = "Ford Focus";
vehicle[vehicle_index][1] = "ABS";
vehicle[vehicle_index][2] = "Sunroof";
...

与上一个示例相比,它没有那么复杂。

您的分配显然不正确,因为它没有考虑指针指向的数组类型中的
5
。如果您的代码通过自身的错误“补偿”分配错误,例如,不使用该
5
提供的任何额外内存,则它可能在代码中工作。我们看不到您的其他代码,这就是为什么没有办法说为什么它看起来工作

无论如何,你可以通过

vehicle = malloc(numVehicles * sizeof **vehicle);
sizeof**vehicle
将为您提供
sizeof(char*[5])

现在您可以按如下方式访问数组元素:

(*vehicle)[vehicle_index][0] = "Ford Focus";
(*vehicle)[vehicle_index][1] = "ABS";
(*vehicle)[vehicle_index][2] = "Sunroof";
...

但是,奇怪的是,您希望将
vehicle
作为指向未指定大小数组的指针,这就是您的
vehicle
的声明方式。它会起作用,但似乎不必要地过于复杂。如果您有选择,将
车辆
声明为

char *(*vehicle)[5];
并将其分配为

vehicle = malloc(numVehicles * sizeof *vehicle);
在这种情况下,您将有太多的访问权限

vehicle[vehicle_index][0] = "Ford Focus";
vehicle[vehicle_index][1] = "ABS";
vehicle[vehicle_index][2] = "Sunroof";
...

与上一个示例相比,它没有那么复杂。

您的分配显然不正确,因为它没有考虑指针指向的数组类型中的
5
。如果您的代码通过自身的错误“补偿”分配错误,例如,不使用该
5
提供的任何额外内存,则它可能在代码中工作。我们看不到您的其他代码,这就是为什么没有办法说为什么它看起来工作

无论如何,你可以通过

vehicle = malloc(numVehicles * sizeof **vehicle);
sizeof**vehicle
将为您提供
sizeof(char*[5])

现在您可以按如下方式访问数组元素:

(*vehicle)[vehicle_index][0] = "Ford Focus";
(*vehicle)[vehicle_index][1] = "ABS";
(*vehicle)[vehicle_index][2] = "Sunroof";
...

但是,奇怪的是,您希望将
vehicle
作为指向未指定大小数组的指针,这就是您的
vehicle
的声明方式。它会起作用,但似乎不必要地过于复杂。如果您有选择,将
车辆
声明为

char *(*vehicle)[5];
并将其分配为

vehicle = malloc(numVehicles * sizeof *vehicle);
在这种情况下,您将有太多的访问权限

vehicle[vehicle_index][0] = "Ford Focus";
vehicle[vehicle_index][1] = "ABS";
vehicle[vehicle_index][2] = "Sunroof";
...

与上一个示例相比,它没有那么复杂。

您的分配显然不正确,因为它没有考虑指针指向的数组类型中的
5
。如果您的代码通过自身的错误“补偿”分配错误,例如,不使用该
5
提供的任何额外内存,则它可能在代码中工作。我们看不到您的其他代码,这就是为什么没有办法说为什么它看起来工作

无论如何,你可以通过

vehicle = malloc(numVehicles * sizeof **vehicle);
sizeof**vehicle
将为您提供
sizeof(char*[5])

现在您可以按如下方式访问数组元素:

(*vehicle)[vehicle_index][0] = "Ford Focus";
(*vehicle)[vehicle_index][1] = "ABS";
(*vehicle)[vehicle_index][2] = "Sunroof";
...

但是,奇怪的是,您希望将
vehicle
作为指向未指定大小数组的指针,这就是您的
vehicle
的声明方式。它会起作用,但似乎不必要地过于复杂。如果您有选择,将
车辆
声明为

char *(*vehicle)[5];
并将其分配为

vehicle = malloc(numVehicles * sizeof *vehicle);
在这种情况下,您将有太多的访问权限

vehicle[vehicle_index][0] = "Ford Focus";
vehicle[vehicle_index][1] = "ABS";
vehicle[vehicle_index][2] = "Sunroof";
...
这比