尝试将malloc内存分别声明为指针变量时出错

时间:2016-01-25 00:11:31

标签: c pointers malloc

我已按以下方式声明了一个char指针:

School *student[10];

for(i=0;i<10;i++){
    *student[i] = malloc(sizeof(Student));   <--- Error points here
}

我得到的错误是:

incompatible types when assigning to type 'struct Student' from type 'void*'

有谁知道我收到此错误的原因?

但是,如果我要在与星形相同的线路上分配内存,怎么办呢?例如:Student *name = malloc(sizeof(Student));为什么这样做?我有点困惑

1 个答案:

答案 0 :(得分:3)

*student[i] = malloc(sizeof(School));应为student[i] = malloc(sizeof(School));

students是指向School类型结构的指针数组。所以你需要为该数组中的每个指针分配。当您编写*student[i]时 - 您正在取消引用指针i而不是为其分配内存。

正如NicolasMiari指出的那样,sizeof运算符必须适用于School而不是student

  

但是,如果我要在与星形相同的线路上分配内存,怎么办呢?例如:Student * name = malloc(sizeof(Student));为什么这样做?我有点困惑

那是不同的。当您编写Student *name = malloc(sizeof(Student));时,您正在声明指针并使用malloc 初始化。您可以像这样在一行中执行这两个步骤。或者,您首先声明它,然后将{/ 1>}分配在另一行 - 在这种情况下,您必须删除星号。

您可能需要参考此问题pointer initialization and pointer assignment