C没有正确分配结构数组的内存?

时间:2016-09-30 00:45:09

标签: c

struct student{
    int id;
    int score;
};

struct student* allocate(){
     struct student* students = (struct student*)malloc(sizeof(struct student)*10);
     return students;
}


void generate(struct student* students){
     int i=0;
     printf("%lu\n", sizeof(students));
     printf("%lu\n", sizeof(struct student));
     int length = sizeof(students)/sizeof(struct student);
     printf("%d\n", length);
     for(i=0;i<length;i++){
          printf("hi\n");
     }
}

我有这个代码,应该创建一个包含10个学生结构的数组。当我进入generate函数并尝试查看学生数组分配了多少内存时,它只显示8个字节,与单个学生结构本身相同,当我进入for循环时,它只打印&#34; hi& #34;一次应该是8次。我做错了什么?

输出:

8
8
1
hi

1 个答案:

答案 0 :(得分:3)

  

我做错了什么?

students是一个指针,因此sizeof(students)为您提供指针的大小。它没有给出students指向的数组的大小。

令人沮丧的是,sizeof(*students)也不起作用 - 它为您提供一个学生的大小,而不是整个数组的大小。那是因为students只指向第一个学生,就编译器而言。

没有内置的方法来获取数组的大小,给定指向它的开头的指针。你需要自己跟踪大小。