2016-01-29 4 views
0

У меня есть цикл while, где в каждой итерации цикла while я создаю объект struct. Затем в конце цикла я добавляю его в конец связанного списка. Теперь я обеспокоен тем, что у меня есть одно и то же имя переменной, когда я каждый раз в цикле, но я не понимаю, как это работает после того, как я присоединю последний связанный объект к связанному списку, что происходит с остальными, которые я разделял, то же имя.Является ли mallocing объект таким образом незаконным?

Мой код:

struct Student{ 
    char *name; 
    int IDno; 
}Student; 

someFunction(){ 
x = 0; 

while(x!=6){ 
    Student *name = malloc(sizeof(Student)); <----- Confusion here 

    addToLinkedList(LinkedListStruct,name); 
} 

Это хорошо, что у меня есть name быть malloced каждый раз в цикле. Может кто-нибудь объяснить мне, что произойдет, если я malloc таким образом, добавьте его в конец связанного списка, а затем перейдите в следующий цикл и сделайте то же самое.

ответ

1

Звонок malloc() не имеет отношения к имени переменной, которой вы присвоите его возвращаемое значение. malloc() не знает, что вы присваиваете его возвращаемое значение переменной с именем name. То, что вы делаете, абсолютно корректно и четко определено.

По-прежнему существует ошибка с кодом, поскольку malloc() возвращает указатель на область памяти, а не на память. Таким образом, декларация должна была быть

Student *name = malloc(sizeof (Student)); 
+0

Эффективно применять результат в соответствующем типе, в данном случае 'Student *'. –

+2

Это на самом деле ** очень плохо ** практика - http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc – Idos

+0

@JohnSensebe, ничего не поделаешь. – SergeyA

Смежные вопросы