不能将malloc与struct数据类型一起使用?

时间:2016-12-20 05:03:30

标签: c struct

这只是更大代码的一部分,但它充满了错误,所以我尝试逐个修复它们。当我尝试在指针向量上使用malloc时,该行返回此错误

  

main.c | 14 |错误:在'*'标记之前预期'{'

任何决议?

   struct students {
       int group;
       char name[20];
       int grade;
   };

   int main()
   {
         struct students *ptr[100];
         int num, i, max=0;
         scanf("%d", &num);
         ptr = (struct*) malloc(num * sizeof(struct));
         if(ptr == NULL)
             {
              printf("error");
              exit(0);
             }
    }

3 个答案:

答案 0 :(得分:0)

  1. 将malloc用于1D数组时,应该像你一样分配一个指针,而不是一个指针数组。

  2. 分配时您正在使用sizeof(struct)。此处的类型为struct students,您需要sizeof(struct students)

  3. 不要转换malloc的结果。请参阅Do I cast the result of malloc?

  4. 最终代码是

    struct students *ptr;
    ptr = malloc (num * sizeof(struct students));
    

答案 1 :(得分:0)

你有一组指向结构的指针。你应该分别为它们分配内存。

Display

但我认为你只想分配一组结构学生。在这种情况下,你只需要一个指针。

for(int i=0; i<100 && i<num; i++)
{
    ptr[i] = malloc(sizeof(struct students));
    if(0 == ptr[i])
    {
        /* Handle this case. */
    }
}
/* Your code. */

/* At the end free the memory. */
for(int i=0; i<100; i++)
{
    if(0 != ptr[i])
    {
        free(ptr[i]);
        ptr[i] = 0;
    }
}

您可以像struct students *ptr = 0; /* You allocate memory and store it in that pointer. */ ptr = malloc(num * sizeof(struct students)); if(0 == ptr) { /* Handle this case. */ } 一样访问数组的第i个元素。但是添加必要的检查并确保ptr[i]

完成阵列使用后,您需要释放已分配的内存。

i < num

答案 2 :(得分:-1)

Struct是保留关键字,用于在C中声明/定义结构,它不是变量,也不是你无法获得它的大小。你已经声明了struct学生(根据你的代码,我认为它应该是学生而不是学生),现在你必须通过双指针定义一个变量并为100个结构分配空间,代码应该是这样的

   struct student {
       int group;
       char name[20];
       int grade;
   };

   int main()
   {
         struct student ** ptr;
         int num, i, max=0;
         scanf("%d", &num);
         ptr = malloc(num * sizeof(struct student));
         if(ptr == NULL)
             {
              printf("error");
              exit(0);
             }
    }

现在您可以访问具有数组下标的个别学生

ptr[0]->grade = 20; // putting 20 in grade of first student

此外,不需要在C

中转换malloc结果