在下面的代码中,一段代码正在运行,但如果我发表评论并运行第二部分它不起作用,为什么?
typedef struct {
float gravity;
float difficulty;
}planet_t;
typedef struct list {
struct list * next;
planet_t planet;
}list_t;
int main()
{
//this piece works
list_t * planetList;
planetList = malloc(sizeof(list_t));
planetList->planet.gravity=9.8;
planetList->planet.difficulty = 2;
planetList->next = NULL;
//this does not work
list_t * planetList;
list_t * temp = planetList;
temp=malloc(sizeof(list_t));
temp->planet.gravity=9.8;
temp->planet.difficulty = 2;
temp->next = NULL;
/* let's assume here is the working code which prints all the elements in Linked List */
}
有人能告诉我,我在这里遗失了什么吗?
答案 0 :(得分:0)
指针只是指向记忆的数字。
考虑这部分代码:
list_t * planetList;
list_t * temp = planetList;
temp=malloc(sizeof(list_t));
让我们逐行分解代码。
list_t * planetList;
您刚刚声明了指针(数字),值未初始化。
list_t * temp = planetList;
您声明了另一个指针(数字),值等于planetList
的未初始化值。
temp=malloc(sizeof(list_t));
您将temp
的值设置为malloc()
返回的任何内容
planetList
保持未初始化状态。
正如@Jonathan指出你的问题可能是planetList
永远不会被设置为任何东西,因此你无法使用它。