C语言编程结构向量分配

C语言编程结构向量分配,c,C,我有一个c语言的结构,我想为我的结构的数组分配内存, 为此,我创建了一个函数。 问题是只有数组的第一个元素在工作。 如果我主要做分配,它是有效的 这是我的密码: typedef struct { int id; char* name; }Car; void read(Car**cars){ int n,i; char name[50]; printf("Cars:"); scanf("%i",&n); *cars = (Car*) m

我有一个c语言的结构,我想为我的结构的数组分配内存, 为此,我创建了一个函数。 问题是只有数组的第一个元素在工作。 如果我主要做分配,它是有效的

这是我的密码:

typedef struct {
    int id;
    char* name;
}Car;

void read(Car**cars){
    int n,i;
    char name[50];

    printf("Cars:"); scanf("%i",&n);

    *cars = (Car*) malloc(n * sizeof(Car));

    for(i=0;i<n;i++) {
        printf("\nCar Name[%i]: ",i);   scanf("%s",name);

       (*cars[i]).id   = i; //when i>0 then It crash here...
       (*cars[i]).name = (char*) malloc(strlen(name)+1);

        strcpy((*cars[i]).name, name);

        printf("Cars Name -> %s ", (*cars[i]).name);
    } 
}

int main() {
   Car *cars = NULL;
   read(&cars);

   return 0;
}
typedef结构{
int-id;
字符*名称;
}汽车;
无效读取(车辆**车辆){
int n,i;
字符名[50];
printf(“Cars:);scanf(“%i”和“&n”);
*cars=(Car*)malloc(n*尺寸(Car));
对于(i=0;i0),它在这里崩溃。。。
(*cars[i]).name=(char*)malloc(strlen(name)+1);
strcpy((*cars[i])名称、名称;
printf(“汽车名称->%s”,(*Cars[i]).Name);
} 
}
int main(){
Car*cars=NULL;
阅读(和汽车);
返回0;
}
我做错了什么

(*cars)[i].id   = i; //when i>0 then It crash here...
这应该对你有用

说明:

n
元素分配给指向
cars
指针的指针的值

但是您尝试去区分
i
th指针指向
cars
元素的值

通过我的更正,你可以忽略第一个指针的
i
th
cars
id。什么是错误的编码,但应该做你想做的

但是,您可能想做的是指定多个指针,这些指针始终指向一个汽车指针;)


注意:请输入
malloc()
的返回值。注意:在
read
函数之外进行分配可能更好:这样,分配和删除/释放将在同一位置进行。
*car=(car*)malloc(n*sizeof(car))输入错误:应该是
cars
对吗?在valgrind中运行代码;它可能会告诉你你的错误在哪里,可能更多。我在这里发布时更改了名称…不是打字错误