C에서 작성한 코드에서 연산자 '->'를 사용하는 동안 이상한 부작용이 나타납니다. 사용 된 포인터가 켜져 쓰레기로 변경되었습니다. 더 구체적으로연산자에서 '->'를 사용하는 이상한 부작용
:
나는 다음과 같은 구조체가 : 나는 디버거를 사용할 때 내가 알아 낸
ListElement ListGetFirst(List list)
{
if(list == NULL || list->head==NULL)
{
return NULL;
}
list->current=list->head;
Node* head =list->head; // here is the problem
ListElement data = (*head)->data;
return data;
}
:
typedef void* ListElement ;
typedef struct List_t* List ;
typedef struct Node_t* Node;
Struct Node_t {
ListElement data ;
Node next;
}
Struct List_t {
Node* head;
Node* current
}
나는 ListGetFirst()
를 다음을 사용, 내가 유선 동작을 얻을 수를 표시된 포인터에서 포인터 목록 -> 머리글이 바뀌었다.
난 정말 아무 생각도 이유가 없다, 나는 알고하지 않았다 '->'부작용 사전에
감사
대부분의 경우 오해를 느끼고 있습니다. – NPE
아니요, -> C에서 부작용이 없습니다. 왜'return list-> head-> data'를하지 않습니까? – Brad
그것은 여러분의 코드이며,'->'의 "부작용"은 아닙니다. 그 정도는 확실합니다. – meagar