Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试将内存malloc到单独声明的指针变量时出错_C_Pointers_Malloc - Fatal编程技术网

尝试将内存malloc到单独声明的指针变量时出错

尝试将内存malloc到单独声明的指针变量时出错,c,pointers,malloc,C,Pointers,Malloc,我以以下方式声明了一个char指针: School *student[10]; for(i=0;i<10;i++){ *student[i] = malloc(sizeof(Student)); <--- Error points here } 有人知道我为什么会犯这个错误吗 但是,如果我将内存分配在同一行中,那么它将与星星一起分配。例如:Student*name=malloc(sizeof(Student))为什么这样做?我有点困惑*学生[i]=malloc(学校的

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

School *student[10];

for(i=0;i<10;i++){
    *student[i] = malloc(sizeof(Student));   <--- Error points here
}
有人知道我为什么会犯这个错误吗

但是,如果我将内存分配在同一行中,那么它将与星星一起分配。例如:
Student*name=malloc(sizeof(Student))为什么这样做?我有点困惑

*学生[i]=malloc(学校的规模))应该是
学生[i]=malloc(学校大小)

students
是指向类型为
School
的结构的指针数组。因此,您需要为该数组中的每个指针进行分配。当您编写
*学生[i]
时,您是在解引用指针
i
,而不是为其分配内存

正如NicolasMiari指出的,
sizeof
操作符必须应用于
学校
,而不是
学生

但是,如果我将内存分配在同一行中,那么它将与星星一起分配。例如:Student*name=malloc(sizeof(Student));为什么这样做有效?我有点困惑

那不一样。当你写
Student*name=malloc(sizeof(Student))
您都在声明一个指针,并用
malloc
初始化它。您可以在一行中完成这两个步骤。或者,您可以先声明它,然后在另一行中用
malloc
分配它,在这种情况下,您必须删除星号

你可以参考这个问题。

*学生[i]=malloc(学校的规模))应该是
学生[i]=malloc(学校大小)

students
是指向类型为
School
的结构的指针数组。因此,您需要为该数组中的每个指针进行分配。当您编写
*学生[i]
时,您是在解引用指针
i
,而不是为其分配内存

正如NicolasMiari指出的,
sizeof
操作符必须应用于
学校
,而不是
学生

但是,如果我将内存分配在同一行中,那么它将与星星一起分配。例如:Student*name=malloc(sizeof(Student));为什么这样做有效?我有点困惑

那不一样。当你写
Student*name=malloc(sizeof(Student))
您都在声明一个指针,并用
malloc
初始化它。您可以在一行中完成这两个步骤。或者,您可以先声明它,然后在另一行中用
malloc
分配它,在这种情况下,您必须删除星号


您可能需要参考这个问题。

的确,星号应该消失。然而,这两种情况不是都应该是学校还是学生?是的。我没听清楚-谢谢。@artm但是如果我把内存分配到同一行,它怎么会和星星在一起呢。例如:Student*name=malloc(sizeof(Student));为什么这样做有效?我确实有点困惑,星号应该消失了。然而,这两种情况不是都应该是学校还是学生?是的。我没听清楚-谢谢。@artm但是如果我把内存分配到同一行,它怎么会和星星在一起呢。例如:Student*name=malloc(sizeof(Student));为什么这样做有效?我有点困惑没有
char
指针。欢迎使用堆栈溢出。请注意,在这里说“谢谢”的首选方式是投票选出好的问题和有用的答案(一旦你有足够的声誉这么做),并接受对你提出的任何问题最有用的答案(这也会给你的声誉带来一点提升)。请查看页面和,并且没有
char
指针。欢迎使用堆栈溢出。请注意,在这里说“谢谢”的首选方式是投票选出好的问题和有用的答案(一旦你有足够的声誉这么做),并接受对你提出的任何问题最有用的答案(这也会给你的声誉带来一点提升)。请参阅本页,以及
incompatible types when assigning to type 'struct Student' from type 'void*'