这只是更大代码的一部分,但它充满了错误,所以我尝试逐个修复它们。当我尝试在指针向量上使用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);
}
}
答案 0 :(得分:0)
将malloc用于1D数组时,应该像你一样分配一个指针,而不是一个指针数组。
分配时您正在使用sizeof(struct)
。此处的类型为struct students
,您需要sizeof(struct students)
不要转换malloc的结果。请参阅Do I cast the result of malloc?
最终代码是
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结果